Trình giải thích biểu thức Cron
Dán biểu thức cron và nhận giải thích bằng tiếng Anh đơn giản. Hỗ trợ định dạng cron standard 5 trường và 6 trường (có giây).
Ví dụ (nhấp để thử)
0 0 * * *— hàng ngày vào nửa đêm*/5 * * * *— mỗi 5 phút0 9 * * MON-FRI— sáng các ngày trong tuần lúc 9 giờ0 0 1 * *— ngày đầu mỗi tháng vào nửa đêm0 0 * * 0— mỗi Chủ nhật vào nửa đêm15 2 * * *— hàng ngày lúc 2:15 sáng0 */6 * * *— mỗi 6 giờ30 3 1-7 * 1— Thứ Hai đầu tiên của tháng lúc 3:30 sáng
- Gõ hoặc dán biểu thức cron vào ô nhập ở trên.
- Đọc giải thích bằng tiếng Anh đơn giản xuất hiện bên dưới.
- Nhấp vào bất kỳ chip ví dụ nào để đặt nó vào ô nhập và xem nó được giải mã.
- Sửa bất kỳ lỗi phân tích nào hiển thị màu đỏ và lặp lại cho đến khi giải thích khớp với ý định của bạn.
Công cụ này làm gì?
Trình giải thích nhận một biểu thức standard Unix cron (5 trường) hoặc biểu thức kiểu Quartz với giây (6 trường) và trả về mô tả tự nhiên như "At 09:00 AM, Monday through Friday." Nó hỗ trợ các toán tử phổ biến — *, ",", -, và / — cùng với các tháng có tên (JAN-DEC) và ngày trong tuần có tên (SUN-SAT). Kết quả cập nhật ở mỗi lần gõ phím để bạn có thể lặp lại biểu thức nhanh chóng.
Ví dụ
Một công việc giờ làm việc điển hình:
0 9 * * MON-FRI Giải mã:
At 09:00 AM, Monday through Friday Một biểu thức Quartz 6 trường cụ thể hơn với giây:
0 30 2 ? * MON Giải mã (mỗi thứ Hai lúc 02:30:00).
Định dạng cron
┌───────── phút (0 - 59) │ ┌─────── giờ (0 - 23) │ │ ┌───── ngày trong tháng (1 - 31) │ │ │ ┌─── tháng (1 - 12, hoặc JAN-DEC) │ │ │ │ ┌─ ngày trong tuần (0 - 6, hoặc SUN-SAT; 0 và 7 đều là Chủ nhật) │ │ │ │ │ * * * * *
Tại sao cron "0 0 * * *" kích hoạt vào nửa đêm UTC chứ không phải giờ địa phương của tôi?
Hầu hết các lỗi cron thực tế rơi vào một số cạm bẫy lặp lại:
- Trôi múi giờ. 0 0 * * * kích hoạt vào nửa đêm theo múi giờ của bộ lên lịch. Trên Kubernetes CronJobs và GitHub Actions mặc định là UTC — đặt spec.timeZone hoặc tự chuyển đổi giờ sang UTC.
- Không khớp 5 trường vs 6 trường. Dán 0 0 9 * * MON-FRI (6 trường) vào bộ lên lịch 5 trường sẽ đọc 0 đầu là phút và 0 là giờ, nên công việc kích hoạt vào nửa đêm, không phải 09:00.
- Ngày trong tháng và ngày trong tuần cùng nhau. 0 0 15 * MON chạy vào ngày 15 và mỗi thứ Hai — không chỉ thứ Hai rơi vào ngày 15. Đây là ngữ nghĩa OR của Vixie-cron.
- Step không khởi động lại khi deploy. */10 * * * * kích hoạt tại :00, :10, :20, :30, :40, :50 trên đồng hồ — không phải mười phút sau deploy cuối cùng.
- Sử dụng ? trong standard cron. Placeholder ? là một phần mở rộng Quartz. Unix cron từ chối nó — hãy dùng * thay thế.
- Ngày trong tuần 0 vs 7. Cả hai đều là Chủ nhật trong cron cổ điển, nhưng một số bộ phân tích (BSD cũ) chỉ chấp nhận 0. Nếu tính di động quan trọng, dùng SUN.
Toán tử
*— bất kỳ giá trị nào,— danh sách giá trị (vd. MON,WED,FRI)-— phạm vi (vd. 1-5)/— giá trị bước (vd. */15 = mỗi 15)
Câu hỏi thường gặp
Sự khác biệt giữa cron 5 trường và 6 trường là gì?
Standard POSIX cron có 5 trường: phút, giờ, ngày-trong-tháng, tháng, ngày-trong-tuần. Biến thể 6 trường thêm trường giây phía trước và được Quartz, Spring @Scheduled, và nhiều thư viện Node cron sử dụng. Một biểu thức 6 trường như "0 0 9 * * MON-FRI" kích hoạt lúc 9:00:00 vào các ngày trong tuần, trong khi 5 trường "0 9 * * MON-FRI" kích hoạt lúc 9:00.
Điều này có hỗ trợ các phần mở rộng Quartz như L, W và # không?
Trình giải thích này hỗ trợ phương ngữ Unix / Vixie cron phổ biến cộng với trường giây đầu tiên tùy chọn. Các token chỉ dành cho Quartz (L cho cuối cùng, W cho ngày làm việc, # cho ngày làm việc thứ n, và placeholder ?) không phải một phần của standard cron và không đảm bảo phân tích được. Nếu bạn phụ thuộc vào chúng, hãy dùng tài liệu cụ thể của bộ lên lịch để xác minh biểu thức.
Tại sao 0 0 * * * kích hoạt vào thời điểm khác với tôi mong đợi?
Biểu thức cron không có múi giờ. Công việc chạy vào nửa đêm theo múi giờ của máy hoặc container sở hữu bộ lên lịch. Trên Kubernetes CronJobs, GitHub Actions, và AWS EventBridge mặc định là UTC. Nếu bạn muốn nửa đêm địa phương, đặt múi giờ của bộ lên lịch một cách rõ ràng (spec.timeZone trên CronJob, biến môi trường TZ, khóa timezone trong cron.yaml).
Tôi có thể kết hợp ngày-trong-tháng và ngày-trong-tuần không?
Trong standard Vixie cron, nếu cả ngày-trong-tháng và ngày-trong-tuần đều bị hạn chế, công việc kích hoạt khi một trong hai khớp — đó là OR, không phải AND. Nên "0 0 15 * MON" chạy vào ngày 15 hàng tháng và mỗi thứ Hai. Quartz đảo ngược điều này và coi một trường phải là "?" để khử nhập nhằng.
Giá trị bước hoạt động như thế nào?
Một bước sử dụng cú pháp phạm vi/bước. "*/15 * * * *" kích hoạt mỗi 15 phút bắt đầu tại :00. "10-50/20" trong trường phút kích hoạt tại :10, :30, :50. Bước không có nghĩa là "mỗi N từ bây giờ" — các ranh giới luôn căn chỉnh với đầu phạm vi, vì vậy đừng mong bước trôi với thời gian hiện tại.
Bạn có lưu biểu thức cron tôi kiểm tra ở đây không?
Không. Chúng tôi không giữ bất kỳ hồ sơ nào về biểu thức bạn gõ. Bất cứ thứ gì bạn dán hoặc thử nghiệm đều bị loại bỏ khi bạn đóng hoặc làm mới trang — không log, không phân tích trên các lịch trình bạn làm việc. Bạn có thể kiểm tra developer tools của trình duyệt nếu muốn yên tâm thêm.