Cron expression là gì? Hướng dẫn cú pháp cron expression

Cron expression là gì? Hướng dẫn cú pháp cron expression

(Xem thêm: Code ví dụ Spring Boot tạo lịch với annotation @Scheduled)

Cron expression là gì?

Cron expression là một đoạn text với định dạng gồm 6 hoặc 7 trường để xác định lịch chạy cho một phương thức, hàm, ứng dụng.

Cron expression là gì? Hướng dẫn cú pháp cron expression

Cron expression được sử dụng trong Java (Spring Scheduling Task, Quartz), trong Node.js (node-schedule)…

Mỗi trường trong cron expression chỉ được phép nhận các giá trị sau đây:

Trên trường Bắt buộc Giá trị cho phép Các ký tự đặc biệt cho phép
Seconds 0-59 , – * /
Minutes 0-59 , – * /
Hours 0-23 , – * /
Day of month 1-31 , – * ? / L W
Month 1-12 or JAN-DEC , – * /
Day of week 1-7 or SUN-SAT , – * ? / L #
Year Không , – * /

Trường thứ 7, tức là trường Year trong cron expression là không bắt buộc (đặc biệt ví dụ như trong Spring Schedule nó chỉ chấp nhận 6 trường đầu tiên).

Các ký tự đặc biệt trong Cron Expression

  • * (“all values”) – được sử dụng cho tất cả cả trường. Ví dụ nếu sử dụng ở trường hours có nghĩa là chạy hàng giờ.
  • ? (“no specific value”) – nhận giá trị bất kỳ
  • - – sử dụng để chỉ rõ khoảng được chạy. Ví dụ, “10-12” trong trường hours có nghĩa là chạy từ 10h đến 12h (10h,11h,12h)
  • , – sử dụng để liệt kê các giá trị. Ví dụ, “MON,WED,FRI” trong trường day-of-week có nghĩa là chạy vào các ngày thứ hai, thứ tư và thứ sáu.
  • / – sử dụng để chỉ rõ số lần tăng. Ví dụ, “0/15” hoặc “*/15” trong trường seconds nghĩa là cứ 15s chạy một lần.
  • L (“last”)
    • Nếu sử dụng trong trường day-of-month thì có nghĩa là ngày cuối cùng của tháng (ví dụ: “L” ngày cuối cùng của tháng,
    • Nếu sử dụng trong trường day-of-week thì có nghĩa là ngày thứ bảy, nếu có 1 giá trị trước L, ví dụ “6L” tức là ngày thứ 6 cuối cùng của tháng
  • W (“weekday”) – sử dụng để chỉ rõ ngày trong tuần gần nhất với ngày truyền vào. Ví dụ “15W” trong trường day-of-week nghĩa là ngày trong tuần gần nhất với ngày 15 của tháng. Ví dụ ngày 15 là thứ bảy thì nó sẽ chạy vào ngày thứ sáu.
  • # – sử dụng để chỉ rõ thứ tự của ngày trong tháng. Ví dụ “6#3” trong trường day-of-week có nghĩa là ngày thứ sáu lần thứ 3 trong tháng. (một tháng có 4 hoặc 5 ngày thứ sáu thì sẽ chạy vào ngày thứ sáu xuất hiện ở lần thứ 3)
  • Các ký tự trong trường months và day-of-week không phân biệt chữ hoa / thường. FRI giống với fri

Ví dụ

Expression Ý nghĩa
0 0 12 * * ? 12h chiều hàng ngày
0 15 10 ? * * 10:15:00 hàng ngày
0 15 10 * * ? 10:15:00 hàng ngày
0 15 10 * * ? * 10:15:00 hàng ngày
0 15 10 * * ? 2005 10:15:00 hàng ngày – trong năm 2005
0 * 14 * * ? Vào đầu mỗi phút chạy một lần, trong khoảng từ 14h – 14h59
0 0/5 14 * * ? 5 phút chạy một lần từ 14h đến 14h55
0 0/5 14,18 * * ? 5 phút chạy một lần từ 14h-14h55 và 18h-18h55
0 0-5 14 * * ? 1 phút chạy một lần từ 14h00-14h05
0 10,44 14 ? 3 WED chạy vào lúc 14h10 và 14h44 vào tất cả các ngày thứ 3 của tháng 3
0 15 10 ? * MON-FRI chạy vào lúc 10h15 trong các ngày thứ hai đến thứ sáu
0 15 10 15 * ? chạy vào lúc 10h15 ngày 15 hàng tháng
0 15 10 L * ? chạy vào lúc 10h15 trong ngày cuối cùng của tháng
0 15 10 ? * 6L chạy vào lúc 10h15 của thứ sáu cuối cùng của tháng
0 15 10 ? * 6L 2002-2005 chạy vào lúc 10h15 của thứ sáu cuối cùng của tháng, trong các năm 2002-2005

(Xem thêm: Code ví dụ cron expression: Đặt lịch với Java Quartz)

(Xem thêm: Code ví dụ cron expression: Đặt lịch với Spring Boot @Scheduled)

Cron expression là gì? Hướng dẫn cú pháp cron expression

Okay, Done!

References:

https://docs.oracle.com/…/cron_expressions.htm

http://www.quartz-scheduler.org/…/crontrigger.html

https://docs.spring.io/…/CronSequenceGenerator.html

stackjava.com