Làm thế nào để các bên trong của cron daemon hoạt động?


7

Tôi muốn biết làm thế nào cronhoạt động nội bộ. Quá trình có tiếp tục kiểm tra thời gian hiện tại trong một vòng lặp vô hạn (do đó liên tục tiêu thụ chu kỳ CPU) không? Hay một số chức năng tạo ra một ngắt và thông báo cho crondaemon?

Câu trả lời:


9

Có lần tôi đã đọc mã nguồn vixie-cron và phải nhập viện. Tuy nhiên, nếu bạn đang tìm kiếm "một số chức năng tạo ra một ngắt" tại một thời điểm trong tương lai, bạn nên điều tra tòa nhà alarm(2). Nó yêu cầu kernel gửi tín hiệu cho bạn SIGALRMtại thời điểm đã lên lịch, sau đó bạn có thể bắt được. Trong lúc này, quá trình của bạn có thể làm một cái gì đó khác, hoặc sleep(), như tôi đã làm trong bệnh viện.


4
Nâng cao sự hài hước.
4ae1e1

6

Tôi chắc chắn có nhiều biến thể, cách nó hoạt động trong dcron (còn gọi là cron daemon của Dillon) là nó ngủ tới 60 giây một lần, nó cố gắng đồng bộ hóa điều này bằng cách ngủ ít hơn nếu cần để thức dậy 00 giây mỗi phút.

Nó sử dụng sleep()để đưa quá trình vào trạng thái ngủ (trừ khi có tín hiệu xảy ra) mà không sử dụng CPU. Khi thức dậy, nó sẽ kiểm tra một tập tin cron.update(được tạo bằng cách crontabchỉnh sửa). Nó tạo lại hàng đợi chạy của nó nếu được yêu cầu, chạy các tác vụ dự kiến ​​và ngủ lại.

Ít nhất một cron daemon ( fcrond) sử dụng tín hiệu được gửi bằng cách chỉnh sửa crontab cho cron daemon thay vì phương pháp ngủ / kiểm tra.

Tôi chưa bao giờ thấy một crond chạy mọi thứ thường xuyên hơn một lần mỗi phút, vì vậy chúng thường khá nhẹ về tài nguyên.

Trên Linux, nếu bạn nhìn /procvào những thứ như byte đọc / ghi hoặc iowait, crondbạn có thể thấy rằng nó có mức sử dụng tương đối cao, điều này là do nó kết thúc kế toán cho tất cả các quy trình con mà nó khởi động, ví dụ như trên CentOS 5.x:

# grep "^[rw]" /proc/`pgrep crond`/io
rchar: 153463658151
wchar: 91095820045
read_bytes: 44480745472
write_bytes: 2261389312

(nhờ cập nhật gói theo lịch và các tác vụ ASLR / liên kết trước trong trường hợp này)

Xem thêm /programming/3982957/how-does-cron-iternally-schedule-jobs .


1
Ít nhất một ngoại lệ tồn tại: fcronkhông thức dậy mỗi phút chỉ để kiểm tra xem nó có việc cần làm hay không. Sau đó, fcron tính toán thời gian và ngày của lần thực hiện tiếp theo của mỗi công việc và xác định thời gian phải ngủ bao lâu và ngủ trong khoảng thời gian này. - người đàn ông fcron
manatwork

Đẹp, không quen thuộc fcrond, chỉ cần kiểm tra nguồn: nó gọi một người trợ giúp để HUP crond.
mr.spuratic
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.