Biểu thức Cron giải thích: 15 lịch chạy thực tế và các bẫy múi giờ
Cú pháp cron chỉ gói gọn trong một dòng nhưng sớm muộn gì cũng khiến ai cũng vấp, thường là lúc 2 giờ sáng, đúng đêm chuyển giờ tiết kiệm ánh sáng ban ngày. Dưới đây là cách hoạt động của năm trường, một loạt lịch bạn có thể sao chép và các bẫy đáng biết.
Năm trường
┌──────── minute (0–59)
│ ┌────── hour (0–23)
│ │ ┌──── day of month (1–31)
│ │ │ ┌── month (1–12)
│ │ │ │ ┌ day of week (0–6, Sunday = 0)
* * * * *
Mỗi trường nhận một giá trị (5), một danh sách (1,15), một khoảng (1-5), một bước nhảy (*/10) hoặc * nghĩa là mọi giá trị. Một số hệ thống (Quartz, AWS EventBridge) thêm trường giây hoặc năm, vì vậy hãy kiểm tra xem bạn đang viết cho phiên bản nào.
Lịch chạy để sao chép
| Biểu thức | Thời điểm chạy |
|---|---|
*/5 * * * * | Mỗi 5 phút |
0 * * * * | Mỗi giờ, đúng giờ |
15 */2 * * * | Vào phút 15 mỗi 2 giờ |
0 9 * * * | Mỗi ngày lúc 09:00 |
30 2 * * * | Mỗi ngày lúc 02:30 (xem bẫy giờ tiết kiệm bên dưới) |
0 9 * * 1-5 | Các ngày trong tuần lúc 09:00 |
0 18 * * 5 | Thứ Sáu lúc 18:00 |
0 0 * * 0 | Chủ nhật lúc nửa đêm |
0 0 1 * * | Ngày đầu tiên của mỗi tháng |
0 0 1 1 * | Mỗi năm một lần, ngày 1 tháng 1 |
0 8 1,15 * * | Ngày 1 và 15 lúc 08:00 |
*/15 9-17 * * 1-5 | Mỗi 15 phút trong giờ hành chính |
0 0 * * 6,0 | Nửa đêm cuối tuần |
0 3 * 1,4,7,10 * | Hằng ngày lúc 03:00 trong tháng đầu của mỗi quý |
0 12 * * * | Hằng ngày lúc 12:00 trưa |
Bạn có thể dịch hoặc tạo bất kỳ biểu thức nào sang mô tả dễ hiểu bằng Cron Expression Generator, công cụ này còn liệt kê các thời điểm chạy tiếp theo.
Bẫy ngày trong tháng và ngày trong tuần
Khi cả trường ngày trong tháng và ngày trong tuần đều được giới hạn, cron chuẩn sẽ chạy khi một trong hai khớp, chứ không phải cả hai. 0 9 13 * 5 chạy vào ngày 13 mỗi tháng và mỗi thứ Sáu, không chỉ vào thứ Sáu ngày 13. Muốn chạy vào ngày làm việc cuối cùng hoặc thứ Hai đầu tiên, hãy lên lịch hằng ngày rồi kiểm tra ngày trong script của bạn, hoặc dùng trình lập lịch hỗ trợ phần mở rộng như L và #.
Múi giờ và giờ tiết kiệm ánh sáng ban ngày
- Máy chủ và CI chạy theo UTC. Lịch của GitHub Actions, hầu hết container và trình lập lịch trên cloud đều dùng UTC. 09:00 ở New York là
0 14 * * *vào mùa đông và0 13 * * *vào mùa hè. Chuyển đổi bằng Time Zone Converter, hoặc xem nhiều múi giờ cùng lúc trên World Clock. - Các job chạy từ 01:00 đến 03:00 giờ địa phương có rủi ro. Khi đồng hồ nhảy tới, 02:30 không tồn tại và job có thể bị bỏ qua; khi lùi lại, job có thể chạy hai lần. Hãy lên lịch các job quan trọng ngoài khoảng thời gian đó, hoặc chạy trình lập lịch theo UTC.
- Lịch của GitHub Actions có thể bắt đầu trễ vài phút vào giờ cao điểm và sẽ bị tắt trên repository không có hoạt động trong 60 ngày. Tạo workflow bằng GitHub Actions Generator.