công việc cron với cùng thời gian thực hiện


8

Giả sử tôi có một số công việc định kỳ được thiết lập để chạy cùng một lúc: chúng có thực thi song song hay chỉ lần lượt?

(Trường hợp của tôi là Debian ép với cronjobs đặt bên trong /etc/cron.d/mycronjobs).

Câu trả lời:


7

Để hoàn thiện, các công việc trong ví dụ /etc/cron. Ndhourly,d Daily,weekly,monthly} được chạy liên tục. Kịch bản phần chạy vòng lặp trên tất cả các tệp trong thư mục này.

02 4 * * * root run-parts /etc/cron.daily

Vì vậy, bạn có thể sử dụng kết hợp với quy ước đặt tên (tương tự như đánh số /etc/init.d/rc*.dchẳng hạn) để đảm bảo các công việc chạy tuần tự.


Điều gì xảy ra nếu tôi có một số công việc định kỳ trong cùng một tệp, được đặt để chạy cùng một lúc?
Gabriele

Tôi không chắc ý của bạn là "trong cùng một tệp". Nhưng nếu bạn có nghĩa là bạn có một vài dòng có cùng thông số kỹ thuật cùng thời gian (như 0 * * * *bạn đã đăng trước đó) thì như những người khác đã đăng, không có gì đảm bảo về thứ tự họ sẽ chạy. Họ có thể chạy song song trên hệ thống đa lõi, AFAIK thứ tự mà họ chạy thậm chí có thể khác nhau mỗi ngày. Quy ước đặt tên mà tôi đã đề cập kết hợp với một phần chạy hoặc sử dụng tập lệnh chính gọi các tập lệnh sao lưu thực tế là cách duy nhất để đảm bảo các tập lệnh được thực thi theo một thứ tự cụ thể.
Bram

Được rồi, vì tôi cần chắc chắn rằng các kịch bản của mình sẽ chạy từng cái một, tôi nghĩ rằng tôi sẽ tìm một "tập lệnh chính" được kích hoạt bởi một công việc định kỳ và gọi bất kỳ tập lệnh nào từ trong tập lệnh chính.
Gabriele

5

Các tác vụ được liệt kê trong cron sẽ chạy song song, giống như các quy trình thường làm. Không có cách nào để chắc chắn cái nào sẽ bắt đầu trước, và không có cách nào trong cron để đảm bảo nhiệm vụ A đã hoàn thành trước khi nhiệm vụ B bắt đầu.


1
Bạn có thể đảm bảo nhiệm vụ A đã hoàn thành trước khi nhiệm vụ B bắt đầu bằng cách liệt kê chúng trên cùng một dòng và phân tách chúng bằng dấu chấm phẩy.
Nicholas

Điều đó không có nghĩa là nhiệm vụ A đã hoàn thành thành công. Có lẽ bạn có thể sử dụng một &&, nhưng bất cứ điều gì như thế này nên được thực hiện bởi một tập lệnh được gọi.
Sirch

Bạn có thể sử dụng bất kỳ toán hạng nào hỗ trợ bash shell. Sử dụng &&, ||, hoặc; trong cron là thực tế phổ biến trong kinh nghiệm của tôi.
Nicholas

2

Cron là một daemon (dịch vụ) chạy liên tục; tuy nhiên, nó đọc crontabs mỗi phút một lần.

Trình tự chính xác trong đó các công việc được thực thi sẽ phụ thuộc vào việc triển khai hệ thống của bạn.

Các tệp lỏng mà một số bản phân phối đặt bên trong /etc/cron.d/ được quét để cài đặt bộ đếm thời gian cron của chúng, vì các tệp này tuân theo cú pháp crontab (5) thông thường.

Thứ tự các công việc riêng lẻ được thực hiện tùy thuộc vào lịch trình bạn đặt cho chúng, rõ ràng.


Điều gì sẽ xảy ra nếu lịch trình được đặt như thế này: ---- 0 * * * * root sh / var / opt / backup_scripts / backup1 - 0 * * * * root sh / var / opt / backup_scripts / backup2 ---- Họ sẽ chạy tuần tự, tức là backup1 và khi kết thúc, backup2?
Gabriele

Trình tự chính xác trong đó các công việc được thực thi sẽ phụ thuộc vào việc triển khai hệ thống của bạn. người đàn ông cron để biết chi tiết.
thích nghi

man cron không nói gì về điều đó (ít nhất là trong Debian).
Gabriele

2

Họ sẽ chạy song song. Bạn có thể sử dụng các phương pháp sau để chạy các quy trình một cách tuần tự.

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.