Làm thế nào để lập lịch cron thực sự được thực hiện và đảm bảo các kịch bản chạy đúng giờ?


9

Tôi muốn hỏi về công việc định kỳ. OK, chúng tôi đặt các tập lệnh trong crontab và cron daemon thực thi chúng.

Bây giờ nếu tôi hiểu điều này, mỗi phút, cron sẽ kiểm tra crontab của mỗi người dùng và thực thi các tập lệnh được cấu hình. Nhưng làm thế nào điều này thực sự được thực hiện? Nó ngã ba quá trình con vv?

Nó không thể thực thi các nhiệm vụ một cách tuần tự vì thời gian sẽ bị mất (ví dụ do phải chờ một kịch bản chạy dài để hoàn thành). Vì vậy, làm thế nào điều này thực sự được thực hiện.

Chỉ để giúp đỡ, tôi không tìm kiếm mã cấp thấp. Một mô tả cấp cao (có lẽ là thuật toán?) Hoặc cách thực hiện điều này trong hầu hết các bản phân phối sẽ đủ cho tôi.

Câu trả lời:


9

Tôi đã tìm thấy câu hỏi và trả lời này trên StackOverflow có tiêu đề: Làm thế nào để cron nội bộ lên lịch công việc? .

trích từ bài đăng đó và bài viết trên wikipedia về cron

The algorithm used by this cron is as follows:

1. On start-up, look for a file named .crontab in the home directories of 
   all account holders.

2. For each crontab file found, determine the next time in the future that
   each command is to be run.

3. Place those commands on the Franta-Maly event list with their corresponding
   time and their "five field" time specifier.

4. Enter main loop:

   1. Examine the task entry at the head of the queue, compute how far in 
      the future it is to be run.

   2. Sleep for that period of time.

   3. On awakening and after verifying the correct time, execute the task 
      at the head of the queue (in background) with the privileges of the 
      user who created it.

   4. Determine the next time in the future to run this command and place 
      it back on the event list at that time

Câu hỏi và trả lời về SuperUser này có tiêu đề: cron hoạt động như thế nào? bao gồm một số câu hỏi bổ sung của bạn. Ví dụ, câu hỏi của bạn là làm thế nào để cron giải quyết các công việc được lên lịch cùng một lúc. Một trong những câu trả lời trong luồng đó nói rằng khi cron daemon xử lý từng tác vụ, nó sẽ thực hiện từng công việc được lên lịch để không một công việc nào đóng vai trò là công cụ chặn cho các công việc có thời gian chồng chéo.


Nếu nó là một hàng đợi thì các tác vụ sẽ chạy lần lượt từng cái (những cái trong cùng một hàng đợi). Vì vậy, nếu một nhiệm vụ cần 3 phút để thực hiện và nhiệm vụ tiếp theo trong hàng đợi dự kiến ​​sẽ được lên lịch trong phút tiếp theo, thì điều này xảy ra như thế nào?
Jim

@Jim - Tôi nghĩ một điều đơn giản mà bạn cho rằng đó là việc đọc các tệp mỗi phút khi nó hoàn toàn không làm điều này. Khi bạn lưu tệp, trình nền crond sẽ kết hợp nội dung của crontab cho một người dùng nhất định và sau đó thêm nó vào hàng đợi theo thứ tự được sắp xếp dựa trên thời gian trong tương lai mà nó sẽ chạy.
slm

Ok. Trong trường hợp này, hàng đợi có thể có các tác vụ nên được chạy đồng thời. Vì vậy, các tiến trình con được rẽ nhánh hay gì đó?
Jim

@Jim - chính xác. Cũng xem ý kiến ​​bổ sung của tôi trong câu trả lời.
slm

Làm thế nào để nó phát hiện các nhiệm vụ mới mà chúng ta tạo cho cron? Liệu nó có sử dụng cái gì đó như inotify để xem hệ thống tập tin hay cái gì khác không?
CMCDragonkai
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.