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 đó?


85

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?


3
Tôi đã cố gắng tìm kiếm hướng dẫn anacron trong web nhưng không thể tìm thấy bất kỳ cái nào tốt. Nhìn vào trang người đàn ông cũng không giúp tôi nhiều. Làm cách nào tôi có thể thay đổi crontab đã có để nó được đổi thành anacron ?? Hoặc bất kỳ hướng dẫn nào trong đây sẽ rất hữu ích
seg.server.fault

1
Tôi đã chỉnh sửa câu trả lời của mình để đưa vào một số ví dụ. Tôi hy vọng điều đó sẽ giúp!
jeff

Câu trả lời:


70

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ó một chút 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 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.


5
Theo mặc định, Ubuntu sử dụng anacron.
3dinfluence

1
cảm ơn, 3dincluence - câu trả lời được điều chỉnh để chỉ ra crontabs nào được xử lý bởi anacron trong tập hợp ubfox mặc định.
jeff

2
nếu bạn đặt tập lệnh vào /etc/cron.*/ thay vì có mục crontab riêng, đừng có "." trong tên tệp của tập lệnh. debian và ubfox sử dụng các phần chạy để chạy các tập lệnh như vậy và theo mặc định các phần chạy sẽ bỏ qua các tệp có a. trong tên tệp - điều này là do nó không chạy các phiên bản .dpkg-old và .dpkg-dist của các tập lệnh được đổi tên từ các bản nâng cấp. vì vậy hãy gọi tập lệnh hoặc symlink "duy trì" chứ không phải là "notify.sh".
cas

OpenSUSE sử dụng cronie theo mặc định từ ngày 11.2 trở đi (đến Tumbleweed / Leap 42.2). Để sử dụng anacron, cài đặt cronie-anacrongói.
palswim

13

Điều này phụ thuộc vào lịch trình cron bạn sử dụng. Trình nền cơ bản của vanilla cron 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 .


5

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


2

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.


2

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ị bỏ lỡ 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.

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.