Tạo Cron Expression
Xây dựng, phân tích và kiểm tra biểu thức crontab và Quartz. Dán bất kỳ dòng nào hoặc macro @daily, mở rộng, xem mô tả dễ hiểu và các lần chạy kế tiếp.
Cron Expression hoạt động thế nào: Cú pháp, Trường & Ví dụ
Công cụ tạo Cron Expression online mạnh mẽ giúp bạn tạo, phân tích, kiểm tra và trực quan hóa biểu thức lịch trình cron. Dán một dòng crontab hoặc Quartz có sẵn (kể cả macro @), mở rộng nó vào trình tạo trực quan, chạy kiểm tra phạm vi nghiêm ngặt theo từng trường và xem trước thời gian chạy tiếp theo. Hỗ trợ cả định dạng Unix/Linux (5 trường) và Quartz (6-7 trường).
Cron Expression là gì?
Cron expression (biểu thức cron) là một chuỗi định nghĩa lịch trình cho các tác vụ tự động. Nó bao gồm các trường đại diện cho đơn vị thời gian:
- Phút (0-59)
- Giờ (0-23)
- Ngày trong tháng (1-31)
- Tháng (1-12 hoặc JAN-DEC)
- Ngày trong tuần (0-7 hoặc SUN-SAT, trong đó 0 và 7 là Chủ nhật)
- Năm (tùy chọn, cho Quartz)
Ký tự đặc biệt:
* (dấu sao) - Bất kỳ giá trị nào
, (dấu phẩy) - Phân tách danh sách giá trị
- (gạch ngang) - Khoảng giá trị
/ (dấu gạch chéo) - Giá trị bước nhảy
? (dấu hỏi) - Không có giá trị cụ thể (chỉ Quartz)
Ví dụ: `0 9 * * 1-5` nghĩa là "Lúc 9:00 sáng, từ thứ Hai đến thứ Sáu"
Sự khác biệt giữa định dạng cron Unix và Quartz là gì?
Unix/Linux Cron (5 trường):
- Định dạng: `phút giờ ngày tháng ngàytrongtuan`
- Ví dụ: `30 14 * * 1` = Mỗi thứ Hai lúc 2:30 chiều
- Được dùng bởi: Linux crontab, hệ thống Unix, hầu hết các server
- Phạm vi: Chỉ từ phút đến ngày trong tuần
Quartz Cron (6-7 trường):
- Định dạng: `giây phút giờ ngày tháng ngàytrongtuan [năm]`
- Ví dụ: `0 30 14 * * MON` = Mỗi thứ Hai lúc 2:30:00 chiều
- Được dùng bởi: Java Quartz Scheduler, Spring Boot, nhiều framework ứng dụng
- Có trường giây
- Có thể bao gồm trường năm tùy chọn
- Hỗ trợ ? (không có giá trị cụ thể)
Công cụ này hỗ trợ cả hai định dạng. Chọn dựa trên nơi bạn sẽ sử dụng biểu thức.
Làm thế nào để tạo cron expression?
Tạo cron expression rất dễ dàng với công cụ này:
1. Chọn định dạng của bạn (Unix hoặc Quartz)
2. Với mỗi đơn vị thời gian, chọn mẫu:
- Mỗi: Chạy ở mọi khoảng (dùng *)
- Cụ thể: Chạy ở các giá trị cụ thể (vd: 0,15,30,45)
- Khoảng: Chạy trong một khoảng (vd: 9-17 cho 9 sáng đến 5 chiều)
- Bước nhảy: Chạy theo khoảng cách (vd: */15 cho mỗi 15 phút)
3. Xem biểu thức được tạo
4. Đọc mô tả dễ hiểu để xác minh
5. Kiểm tra thời gian chạy tiếp theo để xác nhận lịch trình
6. Sao chép và sử dụng trong hệ thống của bạn
Công cụ kiểm tra biểu thức của bạn theo thời gian thực và cho bạn biết chính xác khi nào nó sẽ chạy.
Một số ví dụ cron expression phổ biến?
Dưới đây là các cron expression phổ biến:
Mỗi phút:
`* * * * *` (Unix)
`0 * * * * *` (Quartz)
Mỗi giờ ở phút 0:
`0 * * * *` (Unix)
`0 0 * * * *` (Quartz)
Mỗi ngày lúc nửa đêm:
`0 0 * * *` (Unix)
`0 0 0 * * *` (Quartz)
Mỗi ngày trong tuần lúc 9 sáng:
`0 9 * * 1-5` (Unix)
`0 0 9 * * MON-FRI` (Quartz)
Mỗi 15 phút:
`*/15 * * * *` (Unix)
`0 */15 * * * *` (Quartz)
Ngày đầu tiên của tháng lúc 6 sáng:
`0 6 1 * *` (Unix)
`0 0 6 1 * *` (Quartz)
Hai lần mỗi ngày (9 sáng và 6 chiều):
`0 9,18 * * *` (Unix)
`0 0 9,18 * * *` (Quartz)
*/15 trong cron có nghĩa là gì?
Ký hiệu */15 nghĩa là "mỗi 15 đơn vị" và được gọi là giá trị bước nhảy:
- */15 ở phút = Mỗi 15 phút (0, 15, 30, 45)
- */2 ở giờ = Mỗi 2 giờ (0, 2, 4, 6, 8, 10...)
- */5 ở ngày = Mỗi 5 ngày (1, 6, 11, 16, 21, 26)
Phân tích:
- * nghĩa là "tất cả các giá trị có thể"
- /15 nghĩa là "mỗi giá trị thứ 15"
- Kết hợp: "từ tất cả các giá trị, lấy mỗi giá trị thứ 15"
Bạn cũng có thể chỉ định khoảng với bước nhảy:
- 0-30/5 = Mỗi 5 phút từ 0 đến 30 (0, 5, 10, 15, 20, 25, 30)
- 9-17/2 = Mỗi 2 giờ từ 9 sáng đến 5 chiều (9, 11, 13, 15, 17)
Điều này hữu ích để tạo khoảng thời gian đều đặn mà không cần liệt kê tất cả các giá trị.

Làm thế nào để kiểm tra cron expression của tôi?
Công cụ này cung cấp nhiều cách để kiểm tra cron expression của bạn:
1. Mô tả dễ hiểu:
- Tự động dịch biểu thức của bạn sang tiếng Việt đơn giản
- Ví dụ: "Lúc 9:00 sáng, từ thứ Hai đến thứ Sáu"
- Giúp bạn xác minh lịch trình khớp với ý định của bạn
2. Thời gian chạy tiếp theo:
- Hiển thị 5-10 lần thực thi được lên lịch tiếp theo
- Hiển thị ngày và giờ thực tế
- Giúp phát hiện sai sót (vd: sai múi giờ, ngày không mong muốn)
3. Trình tạo trực quan:
- Các điều khiển tương tác hiển thị các tùy chọn hợp lệ
- Ngăn tạo biểu thức không hợp lệ
- Làm nổi bật xung đột hoặc vấn đề
4. Kiểm tra theo thời gian thực:
- Kiểm tra cú pháp khi bạn gõ
- Hiển thị lỗi ngay lập tức
- Đảm bảo biểu thức hợp lệ trước khi sử dụng
Trước khi triển khai, hãy luôn xác minh:
- Lịch trình khớp với yêu cầu của bạn
- Thời gian chạy tiếp theo trông đúng
- Múi giờ được xem xét (nếu có)
- Biểu thức hoạt động với cron implementation của bạn (Unix vs Quartz)
Tôi có thể dùng tên tháng thay vì số không?
Có! Cron expression hỗ trợ cả số và tên cho tháng và ngày:
Tháng (1-12):
- Số: 1, 2, 3... 12
- Tên: JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
- Ví dụ: `0 0 1 JAN,JUL *` = Nửa đêm ngày 1 tháng Giêng và tháng Bảy
Ngày trong tuần (0-7, trong đó 0 và 7 = Chủ nhật):
- Số: 0-7
- Tên: SUN, MON, TUE, WED, THU, FRI, SAT
- Ví dụ: `0 9 * * MON-FRI` = 9 sáng từ thứ Hai đến thứ Sáu
Lưu ý:
- Tên thường là viết tắt 3 chữ cái
- Không phân biệt chữ hoa chữ thường (MON, mon, Mon đều được)
- Không phải tất cả cron implementation đều hỗ trợ tên
- Số tương thích hơn và được hỗ trợ rộng rãi
- Công cụ này hiển thị cả hai định dạng
Để tương thích tối đa, dùng số. Để dễ đọc, dùng tên.
Các lỗi cron expression phổ biến?
Các lỗi phổ biến và cách tránh:
1. Sai thứ tự trường:
✗ `* * 9 * *` - Đây là ngày 9 của tháng, không phải 9 sáng
✓ `0 9 * * *` - Đúng: 9 sáng mỗi ngày
2. Quên trường phút:
✗ `9 * * *` - Không hợp lệ (thiếu phút)
✓ `0 9 * * *` - Đúng (phút phải đứng đầu)
3. Dùng 24 cho nửa đêm:
✗ `0 24 * * *` - Không hợp lệ (giờ từ 0-23)
✓ `0 0 * * *` - Đúng (nửa đêm là 0)
4. Cả ngày-trong-tháng và ngày-trong-tuần:
✗ `0 9 15 * 1` - Chạy ngày 15 VÀ mỗi thứ Hai (logic OR)
✓ `0 9 15 * *` hoặc `0 9 * * 1` - Chọn một
5. Sai cú pháp bước nhảy:
✗ `15/ * * * *` - Cú pháp không hợp lệ
✓ `*/15 * * * *` - Đúng mỗi 15 phút
6. Dùng ? trong Unix cron:
✗ `0 9 ? * 1` - ? chỉ dành cho Quartz
✓ `0 9 * * 1` - Dùng * trong Unix cron
Công cụ này ngăn các lỗi này với kiểm tra và gợi ý hữu ích!
Các macro @daily, @hourly và @reboot nghĩa là gì?
Hầu hết các triển khai crontab (Vixie/cron, systemd timer và nhiều CI runner) chấp nhận macro tên gọi thay cho năm trường:
@yearly hoặc @annually = `0 0 1 1 *` (một lần mỗi năm, 1 tháng 1 lúc nửa đêm)
@monthly = `0 0 1 * *` (nửa đêm ngày 1 mỗi tháng)
@weekly = `0 0 * * 0` (nửa đêm mỗi Chủ nhật)
@daily hoặc @midnight = `0 0 * * *` (mỗi ngày lúc nửa đêm)
@hourly = `0 * * * *` (đầu mỗi giờ)
@reboot = chạy một lần khi hệ thống hoặc scheduler khởi động (không lặp lại)
Dán bất kỳ macro nào vào ô Phân tích / Kiểm tra và công cụ sẽ mở rộng macro thành các trường tương đương, điền vào trình tạo và hiển thị thời gian chạy kế tiếp. @reboot không có lịch lặp lại nên không áp dụng xem trước. Lưu ý Quartz KHÔNG hỗ trợ các macro @ này; chỉ dùng chúng với cron Unix/Linux.
Vì sao cron của tôi chạy thêm ngày (ngày trong tháng vs ngày trong tuần)?
Đây là cái bẫy phổ biến nhất với dân chuyên. Khi CẢ HAI trường ngày-trong-tháng và ngày-trong-tuần đều bị giới hạn (không trường nào là *), cron Unix tiêu chuẩn dùng logic OR, không phải AND.
Ví dụ: `0 9 15 * 1` KHÔNG có nghĩa "ngày 15 chỉ khi là thứ Hai". Nó nghĩa là "lúc 9:00 vào ngày 15 HOẶC bất kỳ thứ Hai nào", nên chạy nhiều hơn dự kiến.
Quy tắc:
- Nếu chỉ một trong hai trường được đặt (trường kia là *), chỉ trường đó áp dụng.
- Nếu CẢ HAI được đặt, khớp khi BẤT KỲ trường nào khớp (OR).
- Để nhắm một điều kiện duy nhất, để trường kia là * (Unix) hoặc ? (Quartz): dùng `0 9 15 * *` cho ngày 15, hoặc `0 9 * * 1` cho thứ Hai.
Công cụ này triển khai đúng ngữ nghĩa OR, nên Thời gian chạy kế tiếp phản ánh chính xác cách cron thật hoạt động; hãy dán biểu thức để xác nhận trước khi triển khai.
Tính năng chính
- Trình tạo cron expression trực quan với điều khiển dễ dùng
- Dán và kiểm tra dòng crontab/Quartz có sẵn với kiểm tra phạm vi theo từng trường
- Mở rộng macro @ (@daily, @hourly, @weekly, @monthly, @yearly, @reboot)
- Hỗ trợ định dạng Unix/Linux (5 trường) và Quartz (6-7 trường)
- Mô tả dễ hiểu của cron expression
- Xem trước 5-10 thời gian chạy kế tiếp với ngữ nghĩa OR ngày chính xác
- Kiểm tra nghiêm ngặt và phát hiện lỗi rõ ràng
- Ví dụ biểu thức phổ biến và mẫu
- Sao chép biểu thức vào clipboard chỉ với một cú nhấp
- Hỗ trợ các ký tự đặc biệt: * , - / ?
- Hỗ trợ tên tháng và ngày (JAN-DEC, SUN-SAT)
- Giá trị bước nhảy và khoảng
- 100% phía client - không gửi dữ liệu đến server
- Hoạt động offline sau khi tải lần đầu
- Thiết kế responsive thân thiện với mobile
- Hỗ trợ chế độ tối
