Menu

Tạo biểu thức cron

Tạo, giải mã và xem trước lịch cron cùng các thời điểm chạy tiếp theo.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Cron expression là gì?

Cron expression là cách viết gọn để mô tả một lịch lặp lại. Đây là cùng cú pháp mà cron của Unix, trình lập lịch gốc của Linux, sử dụng, và nó đã lan sang gần như mọi trình chạy tác vụ bạn sẽ gặp: Kubernetes CronJob, lịch của GitHub Actions, AWS EventBridge, Cloudflare Workers, Vercel cron và phần lớn nền tảng CI/CD.

Định dạng này trông đáng sợ nhưng thực ra chỉ là năm trường cách nhau bằng dấu cách: phút, giờ, ngày trong tháng, tháng, thứ trong tuần. Mỗi trường là một số, một danh sách (1,15), một khoảng (9-17), một bước nhảy (*/5) hoặc ký tự đại diện (*). Một công cụ cron tốt dịch biểu thức thành câu dễ hiểu và hiển thị các thời điểm chạy tiếp theo để bạn kiểm tra trước khi triển khai.

Một số nền tảng mở rộng cú pháp 5 trường cơ bản với trường *giây* ở đầu (Quartz, Spring, Kubernetes 6 trường) hoặc trường *năm* ở cuối. Luôn kiểm tra trình lập lịch của bạn chấp nhận định dạng nào trước khi dán biểu thức vào.

Bạn học được gì khi tạo lịch cron

  • Một cron expression chuẩn có 5 trường: phút, giờ, ngày trong tháng, tháng, thứ trong tuần.
  • * nghĩa là "mọi giá trị" của trường đó: đây là lý do phổ biến nhất khiến lịch chạy thường xuyên hơn dự kiến.
  • */N nghĩa là "mỗi N đơn vị": */5 ở trường phút là "mỗi 5 phút".
  • Ngày trong tháng và thứ trong tuần tác động lẫn nhau: đặt cả hai sẽ thu hẹp lịch, nhưng trong cron Unix cổ điển, đặt một trường là * còn trường kia là giá trị cụ thể là cách an toàn hơn để viết quy tắc chỉ theo thứ hoặc chỉ theo tháng.

Cách viết cron expression từng bước

  1. Bắt đầu từ một mẫu có sẵn

    Chọn mẫu gần với điều bạn muốn: Mỗi phút, Mỗi giờ, Mỗi ngày lúc 9 giờ sáng, Ngày thường lúc 9 giờ sáng, Hằng tháng. Biểu thức sẽ hiện trong trình chỉnh sửa.

  2. Chỉnh từng trường

    Sửa phút, giờ, ngày trong tháng, tháng, thứ trong tuần. Dùng * cho mọi giá trị, danh sách cách nhau bằng dấu phẩy, khoảng (9-17) hoặc bước nhảy (*/15).

  3. Đọc lời giải thích dễ hiểu

    Công cụ dịch biểu thức thành một câu (Lúc 09:00 từ Thứ Hai đến Thứ Sáu). Nếu câu đó không khớp với điều bạn muốn, biểu thức đang sai.

  4. Xem trước các lần chạy tiếp theo

    Kiểm tra từ 5 đến 10 thời điểm chạy tiếp theo theo múi giờ địa phương. Cẩn thận với thời điểm chuyển đổi giờ mùa hè nếu lịch nằm gần lúc đổi giờ.

  5. Sao chép vào trình lập lịch

    Đưa biểu thức vào crontab, workflow GitHub Actions, Kubernetes CronJob hoặc bất kỳ trình lập lịch nào bạn đang dùng.

Tra cứu nhanh các trường cron

Năm trường của một cron expression chuẩn, theo thứ tự. Tài liệu tham khảo: trang man crontab(5) của POSIX.

Vị tríTrườngKhoảng giá trịKý tự đặc biệt
1Phút0 đến 59* , - /
2Giờ0 đến 23* , - /
3Ngày trong tháng1 đến 31* , - / ? (một số biến thể)
4Tháng1 đến 12 hoặc JAN đến DEC* , - /
5Thứ trong tuần0 đến 6 (Chủ Nhật = 0) hoặc SUN đến SAT* , - /

Ví dụ cron expression để thử

Mỗi 5 phút

Biểu thức

*/5 * * * *

Nghĩa là

Mỗi 5 phút: vào đầu giờ và cứ 5 phút sau đó.

Bước nhảy (*/5) là cách dễ nhất để diễn đạt "mỗi N" mà không phải liệt kê từng số. Thường dùng cho health check và tác vụ polling.

Ngày thường lúc 9 giờ sáng

Biểu thức

0 9 * * 1-5

Nghĩa là

Lúc 09:00 từ Thứ Hai đến Thứ Sáu.

Khoảng thứ trong tuần 1-5 nghĩa là từ Thứ Hai đến Thứ Sáu. Dùng cho lời nhắc trong giờ hành chính và bản tin tổng hợp chỉ gửi ngày thường.

Ngày đầu tiên mỗi tháng lúc nửa đêm

Biểu thức

0 0 1 * *

Nghĩa là

Lúc 00:00 vào ngày 1 hằng tháng.

Ngày trong tháng là 1 cộng với * cho mọi trường còn lại tạo ra một tác vụ đúng nghĩa hằng tháng. Thường dùng cho thanh toán, báo cáo và tác vụ luân phiên.

Hai lần mỗi giờ, trong giờ hành chính, ngày thường

Biểu thức

0,30 9-17 * * 1-5

Nghĩa là

Vào phút 0 và 30, từ 09:00 đến 17:00, từ Thứ Hai đến Thứ Sáu.

Danh sách dấu phẩy (0,30) cộng một khoảng (9-17) cộng ngày thường. Đây là kiểu lịch bạn dùng để làm mới dữ liệu BI hoặc xử lý hàng đợi chỉ quan trọng trong giờ làm việc.

Lỗi thường gặp với cron

  • Quên múi giờ. Phần lớn daemon cron chạy theo múi giờ của *máy chủ*, không phải của bạn. Hãy đặt múi giờ rõ ràng khi nền tảng hỗ trợ.
  • Đặt cả ngày trong tháng lẫn thứ trong tuần. Trong cron Unix cổ điển, lịch sẽ chạy vào ngày khớp với *một trong hai*, điều khiến hầu hết mọi người bất ngờ ở lần đầu.
  • Dùng */45 và mong nó chạy mỗi 45 phút. Bước nhảy được tính từ 0, nên */45 chạy ở phút 0 và 45, không phải cách đều 45 phút.
  • Không xem trước các lần chạy tiếp theo trước khi triển khai. Một cron expression gần đúng có thể chạy nhiều gấp 60 lần so với dự định.
  • Quên thời điểm chuyển đổi giờ mùa hè. Lịch 0 2 * * * có thể chạy hai lần vào ngày lùi đồng hồ, và không chạy lần nào vào ngày đồng hồ tiến lên.

Câu hỏi thường gặp về cron expression

Làm sao để viết một cron expression?
Một cron expression chuẩn có năm trường cách nhau bằng dấu cách: phút, giờ, ngày trong tháng, tháng, thứ trong tuần. Dùng * cho *mọi giá trị*, một số cho giá trị chính xác, danh sách dấu phẩy (1,15), khoảng (9-17) hoặc bước nhảy (*/5).
*/5 * * * * có nghĩa là gì?
Nó nghĩa là "mỗi 5 phút". */5 ở trường phút chạy vào phút 0 và cứ mỗi 5 phút sau đó (0, 5, 10, 15, …, 55), còn * ở mọi trường khác nghĩa là nó chạy mỗi giờ, mỗi ngày, mỗi tháng, mọi thứ trong tuần.
Cron dùng múi giờ nào?
Mặc định, cron dùng múi giờ của hệ thống nơi nó chạy. Phần lớn trình lập lịch trên cloud cho phép đặt múi giờ rõ ràng (TZ=Europe/Berlin, schedule expression của AWS, v.v.). Khi không chắc, hãy lưu lịch theo UTC.
Cron expression có chạy mỗi giây được không?

Cron 5 trường chuẩn có đơn vị nhỏ nhất là phút, nên độ chi tiết cao nhất là mỗi phút. Quartz cron, Spring cron và một số phiên bản Kubernetes thêm trường *giây* thứ 6 cho lịch dưới một phút.

0 0 * * 0 và 0 0 * * 7 khác nhau thế nào?
Cả hai đều mô tả nửa đêm Chủ Nhật. Thứ trong tuần là từ 0 đến 6 (Chủ Nhật đến Thứ Bảy) trong phần lớn bản triển khai cron, nhưng 7 cũng được chấp nhận là Chủ Nhật để tương thích với một số biến thể.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu