Lập trình

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.

Cơ bản · 7 phút đọc · Cập nhật 30 tháng 10, 2026

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ờ

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ứcThờ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-5Các ngày trong tuần lúc 09:00
0 18 * * 5Thứ Sáu lúc 18:00
0 0 * * 0Chủ 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-5Mỗi 15 phút trong giờ hành chính
0 0 * * 6,0Nử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.

Câu hỏi thường gặp

*/5 trong cron nghĩa là gì?
Cứ mỗi giá trị thứ năm của trường đó. Ở trường phút, */5 nghĩa là các phút 0, 5, 10 … 55, tức là cứ năm phút một lần.
Chủ nhật là 0 hay 7?
Cả hai đều dùng được trong hầu hết các triển khai cron: 0 và 7 đều là Chủ nhật. Nên dùng 0 để tương thích tốt hơn.
Cron dùng múi giờ nào?
Múi giờ của máy hoặc trình lập lịch. Cron trên Linux dùng múi giờ hệ thống (CRON_TZ có thể ghi đè ở một số phiên bản); GitHub Actions và hầu hết trình lập lịch trên cloud dùng UTC.

Đọc tiếp