Tạo biểu thức cron
Viết lịch cron và xem chính xác khi nào nó chạy.
10 lần chạy tiếp theo
Bảng tra cú pháp cron
| Trường | Giá trị cho phép |
|---|---|
| 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 (7 cũng là Chủ nhật) |
| Ký hiệu | Ý nghĩa |
|---|---|
* | Mọi giá trị |
, | Danh sách giá trị, ví dụ 1,15 |
- | Một khoảng, ví dụ 1-5 |
/ | Một bước nhảy, ví dụ */15 nghĩa là mỗi 15 giá trị |
Chạy ngay trên trình duyệt. Không có gì bạn nhập vào bị gửi đi đâu cả.
- Giải thích bằng lời dễ hiểu
- 10 lần chạy tiếp theo
- Mẫu có sẵn cho việc thường gặp
Cách viết biểu thức cron
- Chọn một mẫu có sẵn, hoặc gõ biểu thức gồm năm trường.
- Tinh chỉnh từng trường riêng trong các ô bên dưới.
- Xem giải thích và các lần chạy tiếp theo, rồi sao chép biểu thức.
Các lịch cron thường dùng
| Lịch chạy | Biểu thức | Ý nghĩa |
|---|---|---|
| Mỗi phút | * * * * * | Chạy 60 lần mỗi giờ |
| Mỗi 5 phút | */5 * * * * | Vào phút :00, :05, :10 và cứ thế |
| Mỗi đêm lúc 2 giờ sáng | 0 2 * * * | Một lần mỗi 24 giờ |
| Ngày thường lúc 9 giờ sáng | 0 9 * * 1-5 | Chỉ từ thứ Hai đến thứ Sáu |
| Ngày 1 mỗi tháng | 0 0 1 * * | Nửa đêm ngày 1 |
| Mỗi 6 giờ | 0 */6 * * * | Nửa đêm, 6 giờ sáng, giữa trưa, 6 giờ chiều |
Cron khác nhau thế nào giữa các hệ thống
Định dạng 5 trường bên dưới là định dạng mà công cụ này tạo ra, và cũng là định dạng mà hầu hết trình lập lịch job dùng trực tiếp.
| Hệ thống | Số trường | Ghi chú |
|---|---|---|
| Cron / crontab chuẩn | 5 | Phút, giờ, ngày trong tháng, tháng, ngày trong tuần |
| Kubernetes CronJob | 5 | Cùng định dạng, viết dưới dạng chuỗi trong YAML |
| GitHub Actions | 5 | Đặt trong on.schedule.cron, luôn chạy theo UTC |
| Quartz (Java) | 6 hoặc 7 | Thêm một trường giây trước trường phút |
| AWS EventBridge | 6 | Thêm một trường năm và dùng ? cho ngày trong tháng hoặc ngày trong tuần |
Sao chép biểu thức từ đây vào lịch Quartz hoặc AWS rồi thêm trường phụ mà nó yêu cầu; vị trí của phút, giờ, ngày, tháng và ngày trong tuần vẫn giữ nguyên.
Mẹo viết lịch cron
- Ưu tiên dùng bước nhảy thay vì liệt kê dài: */15 * * * * ngắn gọn và rõ ràng hơn 0,15,30,45 * * * *.
- Đặt cả ngày trong tháng và ngày trong tuần giới hạn ít hơn bạn tưởng: cron chuẩn chạy job khi một trong hai khớp, chứ không phải chỉ khi cả hai đều khớp.
- Hãy kiểm tra lịch ở đây trước khi dán vào máy chủ. Chỉ cần sai một trường có thể biến một job chạy hằng ngày thành job chạy mỗi phút.
- Máy chủ thường chạy cron theo UTC. Danh sách lần chạy tiếp theo ở trên hiển thị theo múi giờ của chính bạn, nên hãy quy đổi trước khi cho rằng một job đã chạy đúng giờ.
Câu hỏi thường gặp về Tạo biểu thức cron
Năm trường trong biểu thức cron nghĩa là gì?
Từ trái sang phải: phút (0-59), giờ (0-23), ngày trong tháng (1-31), tháng (1-12) và ngày trong tuần (0-6, trong đó 0 là Chủ nhật). Dấu hoa thị nghĩa là mọi giá trị, nên * * * * * chạy mỗi phút.
Làm sao để chạy một cron job mỗi 5 phút?
Dùng */5 * * * *. /5 nghĩa là mỗi 5 giá trị một lần, nên nó chạy ở phút 0, 5, 10 và cứ thế, ở mọi giờ mỗi ngày.
Điều gì xảy ra nếu tôi đặt cả ngày trong tháng và ngày trong tuần?
Cron chuẩn sẽ chạy job khi một trong hai điều kiện khớp. 0 0 1 * 1 chạy lúc nửa đêm vào ngày 1 mỗi tháng và cũng chạy vào mỗi thứ Hai.
Cron dùng múi giờ nào?
Múi giờ của máy chủ chạy nó, thường là UTC. Các lần chạy trên trang này hiển thị theo múi giờ của chính bạn, nên hãy quy đổi nếu máy chủ của bạn đặt múi giờ khác.
Định dạng này có dùng được cho Kubernetes, GitHub Actions, Quartz hay AWS không?
Kubernetes CronJob và lịch của GitHub Actions dùng cùng định dạng 5 trường này. Quartz thêm một trường giây, còn AWS EventBridge thêm một trường năm và dùng ? ở một trong hai trường ngày, nên cả hai cần điều chỉnh.
Làm sao để chạy job chỉ vào ngày thường hoặc chỉ vào cuối tuần?
Đặt ngày trong tuần là 1-5 cho thứ Hai đến thứ Sáu, hoặc 0,6 cho thứ Bảy và Chủ nhật. Giữ ngày trong tháng và tháng là * để không giới hạn gì thêm.
Các cách viết tắt như @daily và @hourly nghĩa là gì?
Đó là các macro mà một số cron chấp nhận thay cho năm trường. @hourly là 0 * * * *, @daily là 0 0 * * *, @weekly là 0 0 * * 0, @monthly là 0 0 1 * * và @yearly là 0 0 1 1 *. Gõ bất kỳ cái nào vào ô biểu thức ở đây và nó sẽ tự động được mở rộng.