Tiếng Việt

Công cụ dành cho nhà phát triển · Trình tạo Crontab

Cron và thời gian tiết kiệm ánh sáng ban ngày: tại sao công việc 02:30 có thể bỏ qua hoặc chạy hai lần

· Tại sao nó quan trọng

cron time-zones daylight-saving

Ứng cử viên đồng hồ 02:30 vượt qua khoảng trống trong dòng thời gian của đồng hồ treo tường
Hình minh họa vector ToolAcre gốc

Hai lần một năm, đồng hồ treo tường nhảy và một công việc định kỳ được lên lịch trong khoảng trống hoặc chồng chéo hoạt động bất ngờ. Bài đăng này giải thích những gì các crons có nguồn gốc từ Vixie làm, những gì người khác làm và cách lên lịch cho những việc đó.

Ứng cử viên xem trước bị thiếu có thể xảy ra khi vùng được chọn không có thời gian trên đồng hồ treo tường như vậy

Thời gian trên đồng hồ treo tường hàng ngày có thể không có vào ngày mà múi giờ đã chọn di chuyển đồng hồ của nó về phía trước. ToolAcre thể hiện trường hợp đó bằng cách không trả lại ngay lập tức cho phút cục bộ không tồn tại và bỏ qua nó trong danh sách chạy tiếp theo. Biểu thức vẫn hợp lệ; đơn giản là không thể chuyển đổi một ứng cử viên lịch thành một thời điểm thực sự trong vùng đó.

Hành vi này được triển khai trong `wallClockToEpoch`, chuyển đổi ngày và giờ địa phương được đề xuất, định dạng lại kết quả trong cùng một vùng và so sánh mọi thành phần. Sự không khớp sẽ trả về giá trị rỗng. `nextRuns` bỏ qua các ứng viên không có giá trị và tiếp tục tìm kiếm, ngăn thời gian bịa đặt ở gần đó xuất hiện như thể nó khớp chính xác với lịch trình.

Hai sự kiện - mùa xuân tiến tới mất đi một giờ và mùa thu lùi lại lặp lại một giờ

Những thay đổi về đồng hồ tạo ra hai trường hợp khái niệm: khoảng cách tiến tới thời gian tường không bao giờ xảy ra và sự trùng lặp ngược trong đó một số nhãn xuất hiện nhiều lần. Kho lưu trữ có các thử nghiệm để duy trì giờ địa phương hàng ngày trong thời gian thay đổi sắp tới và để bỏ qua thời gian mùa xuân không tồn tại. Nó không chứa bộ kiểm tra chính sách chồng chéo hoàn chỉnh.

Ranh giới bằng chứng đó rất quan trọng vì việc triển khai bộ lập lịch có thể đưa ra những lựa chọn khác biệt. Bài viết này mô tả thuật toán xem trước của trình duyệt, không phải hành vi phổ biến của daemon. Trước khi dựa vào tác vụ định kỳ trong quá trình chuyển đổi đồng hồ, hãy đọc và kiểm tra bộ lập lịch thực tế trên máy chủ đích thay vì quảng cáo bản xem trước thành lời hứa thực thi.

ToolAcre bỏ qua giờ địa phương không tồn tại; nó không mô hình hóa mọi chính sách daemon có nguồn gốc từ Vixie

Sổ làm việc tuyên bố rằng các daemon có nguồn gốc từ Vixie cụ thể sẽ chạy các công việc bị bỏ qua sau khi nhảy và loại bỏ các bản sao. ToolAcre không có trong mã xem trước của nó: nó bỏ qua một ứng cử viên có thành phần cục bộ không thể khứ hồi. Không có gói daemon nào được gọi và không có chính sách bắt kịp nào được lập mô hình. Do đó, những tuyên bố về hoạt động đó được sửa chữa thay vì lặp lại.

Ví dụ đã được thử nghiệm ở Luân Đôn tìm kiếm 01:30 xung quanh thay đổi 2026 tháng 3. Vì phút địa phương đó không tồn tại vào ngày chuyển tiếp nên những ngày được trả về là những ngày hợp lệ sau đây. Điều này chứng tỏ hành vi danh sách của chính tuyến đường. Nó không thiết lập quy trình cron được cài đặt riêng biệt thực hiện với một dòng đã lưu.

Hành vi lập kế hoạch ký tự đại diện trong các trình nền bên ngoài là bằng chứng bên ngoài kho lưu trữ

Các ngôi sao được trình phân tích cú pháp mở rộng thành mọi giá trị được phép, nhưng việc chuyển đổi đồng hồ treo tường sau này vẫn quyết định liệu một ngày giờ cụ thể có ánh xạ tới một thời điểm hay không. ToolAcre không có quy tắc daemon bên ngoài riêng biệt cho “công việc ký tự đại diện”. Tất cả các ứng cử viên đều đi qua cùng một mã chuyển đổi vùng và tìm kiếm lịch.

Các mô tả vẫn hoàn toàn mang tính ngữ pháp: `* * * * *` đọc theo từng phút, trong khi trường số phút có bước nhận được từ ngữ theo bước. Câu này không thuật lại chính sách chuyển tiếp. Sử dụng danh sách lần chạy tiếp theo cho các ví dụ được tính toán của công cụ và không suy ra đảm bảo bắt kịp, thử lại hoặc loại bỏ trùng lặp chỉ từ văn xuôi.

Các cách triển khai khác không được suy ra từ bản xem trước trình duyệt này

Việc triển khai vùng dựa trên dữ liệu `Intl.DateTimeFormat` do trình duyệt hoặc thời gian chạy Nút hiển thị. ToolAcre xác thực tên vùng IANA được cung cấp, cung cấp danh sách được hỗ trợ của công cụ khi có sẵn và bao gồm UTC. Nó không kiểm tra BusyBox, bộ điều phối container hoặc các sản phẩm cron đám mây.

Khi người lập lịch trình khác không đồng ý, hãy coi đó là câu hỏi về phương ngữ và thời gian chạy. Ghi lại phiên bản, cấu hình vùng và hành vi chuyển tiếp được quan sát. Bản xem trước của trình duyệt vẫn hữu ích như một sự so sánh minh bạch nhưng mã của nó không thể trả lời chính sách nào mà dịch vụ khác áp dụng hoặc liệu dịch vụ đó có thử lại công việc bị bỏ lỡ hay không.

Ví dụ đã hoạt động: chọn thời gian treo tường và kiểm tra các ứng cử viên được tính toán của ToolAcre

Một phương pháp hoạt động an toàn hơn là chọn vùng triển khai, nhập biểu thức hàng ngày được đề xuất và kiểm tra ngày xung quanh quá trình chuyển đổi tiếp theo đã biết đối với môi trường đó. Nếu một ứng viên được yêu cầu vắng mặt, hãy chọn một chính sách về thời gian treo tường khác hoặc một chính sách lập lịch trình mà mục tiêu ghi lại một cách rõ ràng. Chạy lại bản xem trước sau khi thay đổi giờ.

Nguồn bao gồm giá trị đặt trước ở 02:30 nhưng giá trị đặt trước chỉ là một ví dụ chứ không phải là đề xuất chung. Hiệu lực của nó phụ thuộc vào lịch và vùng đã chọn. Cửa sổ năm kết quả của ToolAcre có thể không kéo dài quá trình chuyển đổi xa, vì vậy hãy chọn bối cảnh bắt đầu phù hợp trong các thử nghiệm khi kiểm tra hành vi triển khai.

Lựa chọn vùng là một phần của bản xem trước này và chỉ được thảo luận ở đây dưới dạng hoạt động của dao

Không giống như tính năng phân tách sổ làm việc, việc xử lý vùng trực tiếp là một phần của bản xem trước của công cụ này. Bảng điều khiển sẽ hỏi “Hiển thị các lần chạy tiếp theo” và cảnh báo rằng máy đang chạy cron có thể sử dụng một vùng khác với đầu đọc. Việc chọn vùng sẽ thay đổi thời điểm thu được trong khi vẫn giữ nguyên các trường đồng hồ treo tường của biểu thức.

Việc lựa chọn chỉ cấu hình tính toán trình duyệt. Nó không viết chỉ thị múi giờ, cập nhật máy chủ hoặc nhúng lựa chọn vào biểu thức được sao chép. Bảo toàn vùng dự định trong tài liệu triển khai liền kề, sau đó đặt cấu hình bộ lập lịch thực tế thông qua các cơ chế đã được chứng minh cho môi trường đó.

Takeaway: xem trước trong vùng dự định mà không coi danh sách là đảm bảo thực thi

Danh sách lần chạy tiếp theo là đầu ra mô hình từ năm trường, dữ liệu tức thời, số học lịch và vùng trình duyệt bắt đầu. Nó có giá trị trong việc phát hiện thời gian không tồn tại và sự thay đổi giờ ngẫu nhiên. Nó không còn là dấu vết daemon hay bằng chứng cho thấy lệnh đã được thực thi.

Sử dụng bản xem trước để xác định thời gian có nguy cơ cao, sau đó xác minh bộ lập lịch mục tiêu tại ranh giới chuyển tiếp. Lời hứa có thể bảo vệ của ToolAcre là rất hẹp: công việc hàng ngày vẫn diễn ra theo giờ địa phương đã chọn khi giờ đó tồn tại và các ứng viên địa phương không tồn tại sẽ bị bỏ qua. Mọi thứ ngoài đó đều thuộc về hệ thống được triển khai.