Mỗi ngày lúc 2 giờ sáng chạy backup database. Mỗi thứ Hai đầu tuần gửi email báo cáo. Mỗi 15 phút ping để kiểm tra server còn sống không. Tất cả những tác vụ định kỳ đó đều cần cron expression — và viết đúng cú pháp không phải lúc nào cũng dễ nhớ. Tool Cron Builder này cho phép bạn tạo cron expression bằng giao diện kéo thả trực quan, không cần nhớ cú pháp.
Cron là gì?
Cron là trình lập lịch tác vụ (job scheduler) có mặt trên hầu hết hệ thống Unix/Linux. Cron đọc file cấu hình gọi là crontab — trong đó mỗi dòng là một job với một cron expression mô tả lịch chạy.
Ngày nay cron expression được dùng rộng rãi hơn cả Linux crontab — từ GitHub Actions, AWS EventBridge, Google Cloud Scheduler, Kubernetes CronJob, đến các framework như Laravel Task Scheduling, Django-celery, Spring Boot Quartz, Node.js node-cron.
Cấu trúc cron expression
Một cron expression tiêu chuẩn gồm 5 trường, cách nhau bởi dấu cách, theo thứ tự: Phút (0-59) — Giờ (0-23) — Ngày trong tháng (1-31) — Tháng (1-12) — Ngày trong tuần (0-7). Ví dụ: 0 2 * * * nghĩa là mỗi ngày lúc 2:00 AM.
Một số hệ thống (AWS, Quartz, GitHub Actions) dùng 6 trường — thêm trường Giây ở đầu hoặc trường Năm ở cuối. Tool này hỗ trợ cả hai định dạng.
Cách sử dụng Cron Builder
- Chế độ Visual: Chọn tần suất (mỗi phút, giờ, ngày, tuần, tháng), điền giá trị vào các ô — expression tự động được tạo ra phía dưới.
- Chế độ Manual: Gõ thẳng cron expression vào ô nhập liệu — tool parse và giải thích bằng tiếng Anh rõ ràng, đồng thời hiển thị 5 lần chạy tiếp theo.
- Copy: Nhấn copy để lấy expression dùng trong code hoặc cấu hình hệ thống.
Ký hiệu đặc biệt trong cron expression
| Ký hiệu | Tên | Ý nghĩa | Ví dụ |
|---|---|---|---|
* | Wildcard | Mọi giá trị hợp lệ | * ở trường giờ = mọi giờ |
, | List | Liệt kê nhiều giá trị | 1,3,5 = thứ 2, 4, 6 |
- | Range | Khoảng từ-đến | 9-17 = từ 9h đến 17h |
/ | Step | Mỗi n đơn vị một lần | */15 = mỗi 15 phút |
L | Last | Ngày cuối tháng hoặc tuần | L ở trường ngày = ngày cuối tháng |
W | Weekday | Ngày làm việc gần nhất | 15W = ngày làm việc gần ngày 15 |
# | Nth weekday | Thứ N trong tháng | 1#3 = thứ 2 lần thứ 3 trong tháng |
? | No value | Không xác định (Quartz/AWS) | Dùng khi đã set ngày tháng, không muốn set ngày tuần |
Ví dụ cron expression thực tế
| Cron Expression | Lịch chạy | Use case |
|---|---|---|
* * * * * | Mỗi phút một lần | Heartbeat check, polling liên tục |
0 * * * * | Đầu mỗi giờ | Sync dữ liệu theo giờ |
0 2 * * * | Mỗi ngày lúc 2:00 AM | Backup database, cleanup log |
0 9 * * 1 | Thứ Hai mỗi tuần lúc 9:00 AM | Gửi báo cáo đầu tuần |
0 0 1 * * | Ngày 1 mỗi tháng lúc 00:00 | Billing cycle, monthly report |
*/15 * * * * | Mỗi 15 phút | Health check, cache refresh |
0 9-17 * * 1-5 | Mỗi giờ trong giờ làm việc T2-T6 | Sync dữ liệu giờ hành chính |
0 0 * * 0 | Chủ nhật lúc nửa đêm | Weekly maintenance, full backup |
30 23 L * * | 23:30 ngày cuối mỗi tháng | End-of-month processing |
0 6 1 1 * | 6:00 AM ngày 1 tháng 1 | Tác vụ đầu năm mới |
Cron expression trên các nền tảng phổ biến
| Nền tảng | Định dạng | Lưu ý |
|---|---|---|
| Linux crontab | 5 trường tiêu chuẩn | Chỉnh sửa bằng crontab -e |
| GitHub Actions | 5 trường — UTC timezone | Dùng trong on.schedule.cron, luôn là UTC |
| AWS EventBridge | 6 trường, dùng ? | Không thể set cả ngày-tháng và ngày-tuần, phải dùng ? |
| Kubernetes CronJob | 5 trường — chuẩn Linux | Nên dùng UTC để tránh nhầm lẫn timezone |
| Laravel Scheduler | Cron string hoặc helper method | ->cron('0 2 * * *') hoặc ->dailyAt('02:00') |
| Quartz (Java) | 6-7 trường (giây đứng đầu) | Trường giây đứng đầu — khác crontab Linux |
Lưu ý quan trọng khi dùng cron
- Timezone luôn là bẫy: Cron chạy theo timezone của server. Nếu server ở UTC và bạn muốn chạy lúc 8:00 AM giờ Việt Nam (UTC+7), phải đặt
0 1 * * *. Nhiều lỗi production xuất phát từ nhầm lẫn timezone này. - Test trước khi deploy: Dùng tool này để xem danh sách 5-10 lần chạy tiếp theo, đảm bảo lịch đúng ý trước khi push lên production.
- Tránh chạy đúng phút 0 giờ 0:
0 0 * * *là thời điểm nhiều hệ thống cùng chạy — gây spike tải. Thêm offset như17 0 * * *để phân tán tải. - Không có giây trong crontab Linux: Nếu cần chạy mỗi 30 giây, phải dùng hai dòng cron hoặc công cụ khác (systemd timer, Quartz).
Kết luận
Cron expression trông đáng sợ lúc đầu nhưng thực ra có logic rất rõ ràng. Sau vài lần dùng bạn sẽ đọc và viết được những expression thông thường mà không cần tra cứu. Còn với những lịch phức tạp — cứ paste vào đây, xem giải thích và danh sách lần chạy tiếp theo là yên tâm rồi.
Khám phá thêm các tool hữu ích tại codetuthub.com/tools.
0 Bình luận