Nhầm lẫn về mối quan hệ giữa cron và anacron


19

Tôi đã googling vô ích để đưa ra một lời giải thích chung về cách cron và anacron làm việc với nhau. Các trang người đàn ông là một chút quá sâu của một lặn cho tôi tại thời điểm này.

Tôi cảm thấy bối rối vì tôi thêm các tác vụ vào crontab, và nó hoạt động, nhưng khi tôi xóa chúng khỏi crontab, chúng vẫn chạy dưới anacron. Tôi thấy các tác vụ trong /etc/cron.d Daily, nhưng tôi không chắc làm thế nào chúng đạt được điều đó. Cron luôn chạy trên hệ thống của tôi, nhưng không phải là anacron. Trong thực tế, tôi thấy anacron được bắt đầu bởi cron!

Về cơ bản, tôi muốn một phần giới thiệu ở cấp độ người dùng về cách thêm và xóa các tác vụ, vì các câu trả lời dễ bị cho phép bạn chỉnh sửa crontab rõ ràng chưa hoàn tất. Một liên kết đến một hướng dẫn sẽ tốt.

Câu trả lời:


19

Cả hai cronanacronlà trình nền có thể lên lịch thực hiện các tác vụ định kỳ đến một thời điểm nhất định được xác định bởi người dùng.

Sự khác biệt chính giữa cronanacrontrước đây là giả định rằng hệ thống đang chạy liên tục. Nếu hệ thống của bạn tắt và bạn có một công việc được lên lịch trong thời gian này, công việc không bao giờ được thực hiện.

Mặt khác anacronlà 'lỗi thời' và được thiết kế cho các hệ thống không chạy 24x7. Để nó hoạt động, anacronsử dụng các tệp được đóng dấu thời gian để tìm hiểu khi nào lệnh cuối cùng được thực thi. Nó cũng duy trì một tập tin /etc/anacrontabgiống như cronlàm. Ngoài ra, cron.dailychạy anacron mỗi ngày. Do đó, anacronchỉ có thể chạy một công việc một lần một ngày, nhưng croncó thể chạy thường xuyên như mọi phút.

Từ man anacrontab:

Khi được thực thi, Anacron đọc danh sách các công việc từ tệp cấu hình, thường là / etc / anacrontab (xem anacrontab (5)). Tập tin này chứa danh sách các công việc mà Anacron kiểm soát. Mỗi mục công việc chỉ định một khoảng thời gian tính bằng ngày, độ trễ tính bằng phút, mã định danh công việc duy nhất và lệnh shell.

Đối với mỗi công việc, Anacron kiểm tra xem công việc này đã được thực hiện trong n ngày qua chưa, trong đó n là khoảng thời gian được chỉ định cho công việc đó. Nếu không, Anacron chạy lệnh shell của công việc, sau khi chờ số phút được chỉ định làm tham số độ trễ.

Sau khi thoát lệnh, Anacron ghi lại ngày tháng trong tệp dấu thời gian đặc biệt cho công việc đó, để nó có thể biết khi nào thực hiện lại. Chỉ ngày được sử dụng để tính toán thời gian. Giờ không được sử dụng.

Điều này có nghĩa là, nếu một tác vụ được lên lịch để chạy hàng ngày và máy tính bị tắt trong thời gian đó, khi anacron được chạy, có thể thấy rằng tác vụ đã được chạy lần cuối hơn 24 giờ trước và thực hiện đúng nhiệm vụ.

Ví dụ: nếu bạn chỉ định như sau trong /etc/anacrontab:

7       15      test.daily      /bin/sh /home/username/script.sh

và vào ngày mà script.shcông việc được cho là thực thi, nếu hệ thống không chạy, anacronsẽ thực thi trong script.sh15 phút sau khi hệ thống hoạt động trở lại.

Một số tài liệu tham khảo:


Cảm ơn, hướng dẫn về Digital Ocean đặc biệt tốt, như thường thấy. Không chắc chắn làm thế nào tôi bỏ lỡ nó, vì vậy tôi đánh giá cao liên kết.
Đá cẩm thạch hữu cơ

Cảm ơn. Thay vào đó là "cron.daily chạy anacron everyhour", bạn có thay vào đó "cron.daily chạy anacron hàng ngày" không?
Tim

Cảm ơn vì điều đó. - Tôi đã xóa anacronkhỏi tất cả các VPS của mình vì chúng là các hệ thống luôn bật. (Không biết làm thế nào nó đến được ở nơi đầu tiên, tôi không nghe nói về nó.) Các crontabmục của tôi (hàng ngày, hàng tuần, ...) bây giờ tất cả đều chạy vào thời gian dự kiến.
Adambean
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.