it-swarm-vi.tech

Lập kế hoạch công việc bằng crontab, điều gì sẽ xảy ra khi máy tính bị tắt trong thời gian đó?

Tôi lên lịch một số nhiệm vụ bằng cách sử dụng crontab.

Điều gì sẽ xảy ra nếu máy tính của tôi bị tắt hoặc tắt trong thời gian cron được lên lịch để làm gì đó?

Có phải mỗi công việc cron bị bỏ lỡ chạy sau khi máy tính được bật, hoặc bị bỏ lỡ công việc cho ngày hôm đó? Nếu các công việc bị mất không tiếp tục, có cách nào để định cấu hình cron sao cho nó chạy các tác vụ bị bỏ lỡ sau khi máy tính được bật lại không?

92
seg.server.fault

Khi máy tính của bạn bị tắt (hoặc cron daemon nếu không chạy), các công việc cron sẽ không được bắt đầu.

Nếu bạn có các công việc mà bạn muốn chạy sau khi thực tế tắt máy tính, hãy sử dụng anacron. Được cài đặt theo mặc định, xem "man anacron", "man anacrontab" hoặc tệp/etc/anacrontab để biết thêm.

Ubuntu sử dụng anacron theo mặc định cho các mục crontab trong:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

để lại các crontabs còn lại sẽ được xử lý bởi trình nền cron chính, cụ thể:

/etc/crontab
/etc/cron.d
/var/spool/cron

GHI CHÚ

Bản thân Anacron không chạy như một daemon, mà dựa vào các kịch bản khởi động hệ thống và chính cron để chạy.

Trên hộp Ubuntu 8.04 tôi đang xem, /etc/init.d/anacron được chạy khi khởi động và một lần nữa bằng cron mỗi sáng lúc 07:30.

README tại /usr/share/doc/anacron/README.gz có nhiều thông tin hơn một chút so với trong các trang.

VÍ DỤ

Đối với các công việc "hàng ngày", "hàng tuần", "hàng tháng" đơn giản, hãy đặt một bản sao hoặc một liên kết tượng trưng đến tập lệnh vào một trong các thư mục /etc/cron. Đũadaily|weekly|monthly} ở trên. Anacron sẽ đảm nhiệm việc chạy nó hàng ngày/hàng tuần/hàng tháng và nếu máy tính của bạn tắt vào ngày các tập lệnh "hàng tuần" thường chạy, nó sẽ chạy chúng vào lần tiếp theo khi máy tính được bật.

Một ví dụ khác, giả sử bạn có một tập lệnh ở đây: /usr/local/sbin/maint.sh

Và bạn muốn chạy nó cứ sau ba ngày, mục tiêu chuẩn trong/etc/crontab sẽ như thế này:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Nếu máy tính của bạn không hoạt động vào lúc 00:00 ngày 3 tháng, công việc sẽ không chạy cho đến ngày 6.

Để có công việc thay vì chạy vào ngày 4 khi máy tính tắt và "bỏ lỡ" lần chạy thứ 3, bạn sẽ sử dụng công việc này trong/etc/anacrontab (đừng quên xóa dòng khỏi/etc/crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

"Độ trễ" của "5" ở trên có nghĩa là anacron sẽ đợi trong 5 phút trước khi nó chạy công việc này. Ý tưởng là để ngăn chặn anacron bắn ra mọi thứ ngay lập tức khi khởi động.

76
jeff

Điều này phụ thuộc vào lịch trình cron bạn sử dụng. Cơ bản, Vanilla cron daemon sẽ không chạy các tác vụ bị bỏ lỡ do thời gian ngừng hoạt động của hệ thống. Tuy nhiên, có những bộ lập lịch cron khác được thiết kế riêng cho tình huống này sẽ làm điều này cho bạn. Hai ví dụ phổ biến nhất là anacronfcron .

17
Tyler McHenry

Các tác vụ được lên lịch trong khi máy tính tắt sẽ không chạy khi máy tính bật lại

6
Alan H

Nếu bạn tắt máy trong khi các công việc định kỳ đang chạy, hệ thống sẽ tắt và các công việc định kỳ dừng lại (hoặc không chạy).

Một thay thế bạn có thể kiểm tra là anacron.

3
KPWINC

Thực sự phụ thuộc vào cron deamon bạn đang chạy. Vixie-cron sẽ bỏ qua các cronjobs đã bị bỏ lỡ. fcron sẽ chạy các crons bị mất ngay khi có thể. IIRC nó cũng dựa trên vixie-cron, vì vậy nếu đó là những gì bạn đang tìm kiếm, bạn có thể muốn kiểm tra fcron.

3
gregf