Liệu crond xử lý thời gian mùa hè +1 giờ thay đổi?


16

Cuối tuần trước chúng tôi phải đổi thời gian từ 02:00 sang 03:00.

Câu hỏi: Điều gì sẽ xảy ra nếu có một cronjob lúc 02:30?

crond là một giải pháp rất cũ để lên lịch, có lẽ nó nên xử lý nó, nhưng không biết làm thế nào.

Câu trả lời:


18

Nó có thể phụ thuộc vào việc cấy ghép cron của bạn, nhưng trạng thái cron phổ biến của Vixie trong hướng dẫn sử dụng:

Cron sau đó thức dậy mỗi phút, kiểm tra tất cả các crontab được lưu trữ, kiểm tra từng lệnh để xem nó có nên chạy trong phút hiện tại không.

Cân nhắc đặc biệt tồn tại khi đồng hồ được thay đổi ít hơn 3 giờ, ví dụ vào đầu và cuối thời gian tiết kiệm ánh sáng ban ngày. Nếu thời gian đã chuyển tiếp, những công việc sẽ chạy trong thời gian bị bỏ qua sẽ được chạy ngay sau khi thay đổi. Ngược lại, nếu thời gian di chuyển ngược xuống dưới 3 giờ, những công việc rơi vào thời gian lặp lại sẽ không được chạy lại.

Chỉ các công việc chạy vào một thời điểm cụ thể (không được chỉ định là @hourly, cũng như với '*' trong công cụ xác định giờ hoặc phút) mới bị ảnh hưởng. Các công việc được chỉ định bằng ký tự đại diện sẽ được chạy dựa trên thời gian mới ngay lập tức.

Vì thay đổi DST chưa đến 3 giờ, chương trình của bạn sẽ chạy ngay sau 3:00 SA

Tôi không chắc đây có phải là hành vi cụ thể của Vixie không, tôi dường như nhớ lại đây là cách PDP-11 của tôi hoạt động tốt trở lại trong thập niên 80 nhưng tôi không chắc chắn.


2
Wow, kiến ​​thức từ những năm 80 - Ngả mũ!
Isaac

quy tắc ngón tay cái: mỗi năm một lần các con của bạn trong phạm vi giờ đó sẽ không chạy. mỗi năm một lần các con của bạn sẽ chạy hai lần. hệ quả: điều này không phải lúc nào cũng đúng. liên quan: ngừng sử dụng múi giờ địa phương!
tedder42

@ tedder42 vui lòng cung cấp tài liệu tham khảo, yêu cầu của bạn mâu thuẫn với cả tài liệu và hành vi thực tế của cron.
Anthon


Đó là trường hợp giai thoại tham khảo 2 giờ sáng và 3 giờ sáng và không liên quan đến câu hỏi (trong đó đề cập đến 2:30) chiều. Tài liệu tham khảo của bạn có thể là hành vi thú vị (cũ), nó không phù hợp với kinh nghiệm của tôi. Và chạy một máy chủ không có múi giờ có vấn đề riêng của nó.
Anthon

2

Giải pháp tốt nhất là để máy tính của bạn chạy với đồng hồ phần cứng được đặt thành UTC, (Giờ phối hợp quốc tế), AKA GMT hoặc Zulu Time và chỉ thay đổi cách hiển thị thời gian bằng cách đặt múi giờ địa phương để cho phép Tiết kiệm ánh sáng ban ngày Thời gian để tiếp nhận.

Trên SUSE Linux và có lẽ hầu hết các hệ thống khác, nếu Hệ thống Đồng hồ Phần cứng -> Môi trường -> Đồng hồ -> HWCLOCK được đặt thành UTC với cờ -u sau đó và múi giờ của bạn được đặt thành nơi bạn là hệ thống sẽ tự động hiển thị giờ địa phương với sửa chữa DST cho bạn.

Điều này có một số lợi thế:

  • Bạn sẽ không bao giờ phải điều chỉnh thủ công đồng hồ cho các thay đổi DST nữa
  • Các tab CRON sẽ được lưu trữ và thực hiện tại thời điểm UTC
  • Nếu một tệp, ví dụ như nhật ký, được ghi vào lúc 01:30 trước khi kết thúc DST và một tệp khác vào lúc 1:20 sau khi kết thúc DST thì tệp đó sẽ vẫn "Mới hơn" so với tệp khác vì dấu thời gian của tệp sẽ là UTC và chỉ được dịch để hiển thị dựa trên múi giờ hiện tại vào thời gian hiển thị.

Để biết thêm thông tin loại man hwclocktrong một thiết bị đầu cuối.


2
Một nitlog nhỏ. UTC không phải là "Hằng số thời gian chung". UTC có nghĩa là Giờ phối hợp quốc tế
fpmurphy
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.