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 đượ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 | Có | 0-59 | , – * / |
Minutes | Có | 0-59 | , – * / |
Hours | Có | 0-23 | , – * / |
Day of month | Có | 1-31 | , – * ? / L W |
Month | Có | 1-12 or JAN-DEC | , – * / |
Day of week | Có | 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