Cách dùng Trình tạo Cron Expression
- Chọn một lịch phổ biến, hoặc dùng Tạo lịch để chọn tần suất, các ngày trong tuần và giờ, rồi nhấn Dùng lịch này.
- Hoặc dán một biểu thức có sẵn, ví dụ
30 2 * * 1, vào ô Cron expression. Phần mô tả bằng tiếng Việt sẽ cập nhật ngay khi bạn gõ. - Tinh chỉnh từng phần trong Chỉnh sửa trường (phút, giờ, ngày trong tháng, tháng, thứ trong tuần).
- Kiểm tra danh sách Lần chạy tiếp theo theo giờ địa phương hoặc UTC, rồi sao chép biểu thức vào crontab, quy trình CI hoặc bộ lập lịch của bạn.
Cron expression là gì?
Cron expression là một lịch trình ngắn gọn gồm năm trường, cách nhau bằng dấu cách, cho daemon cron của Unix biết khi nào cần chạy một tác vụ. Cú pháp này cũng được dùng bởi các công cụ khác như GitHub Actions, GitLab CI, Kubernetes CronJobs, Vercel và nhiều hàng đợi tác vụ. Công cụ này cho phép bạn tạo biểu thức bằng menu chọn sẵn, giải thích mọi biểu thức bằng tiếng Việt dễ hiểu nhờ thư viện mã nguồn mở cRonstrue, và tính các lần chạy sắp tới để bạn kiểm tra lịch trước khi đưa vào hoạt động.
Năm trường
┌──────── minute (0–59)
│ ┌────── hour (0–23)
│ │ ┌──── day of month (1–31)
│ │ │ ┌── month (1–12, JAN–DEC)
│ │ │ │ ┌ day of week (0–6, SUN–SAT)
│ │ │ │ │
* * * * * command
Ở trường thứ trong tuần, số 7 cũng có nghĩa là Chủ nhật.
Mỗi trường chấp nhận * (mọi giá trị), một số đơn, một khoảng 1-5, một danh sách 1,15,30, một bước */10 hoặc một khoảng có bước 9-17/2. Một số bộ lập lịch (Quartz, Spring, AWS EventBridge) thêm trường giây ở đầu. Hãy chọn “Trường giây” để làm việc với biểu thức 6 phần.
Ví dụ
| Biểu thức | Ý nghĩa |
|---|---|
*/5 * * * * | Mỗi 5 phút |
0 * * * * | Vào đầu mỗi giờ |
30 2 * * * | Mỗi ngày lúc 02:30 |
0 9 * * 1-5 | 09:00 các ngày trong tuần |
0 0 1 * * | Nửa đêm ngày 1 hàng tháng |
0 0 1 */3 * | Nửa đêm ngày đầu tiên của mỗi quý |
15 14 1 * * | 14:15 ngày 1 hàng tháng |
Những lỗi thường gặp
- Cả ngày trong tháng và thứ trong tuần. Nếu cả hai trường đều bị giới hạn, cron kiểu cũ sẽ chạy tác vụ khi một trong hai điều kiện khớp.
0 0 13 * 5có nghĩa là “ngày 13 và mọi thứ Sáu”, không phải “thứ Sáu ngày 13”. Danh sách lần chạy tiếp theo cũng tuân theo quy tắc này. - Quên trường phút.
* 9 * * *sẽ chạy 60 lần từ 09:00 đến 09:59. Dùng0 9 * * *để chỉ chạy một lần. - Múi giờ. Cron dùng múi giờ của máy chủ, còn GitHub Actions và hầu hết bộ lập lịch đám mây dùng UTC. Hãy chuyển danh sách sang UTC để so sánh.
- Bước không đều.
*/45ở trường phút sẽ chạy lúc :00 và :45, rồi lại :00. Bước được tính lại mỗi giờ, không kéo sang giờ sau. - Số ngày của Quartz. Quartz tính Chủ nhật là 1, trong khi cron Unix dùng 0 (hoặc 7). Công cụ này dùng cách đánh số của Unix.
Phần mở rộng không chuẩn
L ở trường ngày trong tháng (ngày cuối cùng của tháng), 5L (thứ Sáu cuối cùng) và 1#2 (thứ Hai thứ hai) được Quartz và một số triển khai cron hỗ trợ, nhưng Vixie cron trên Linux thì không. Công cụ này vẫn giải thích và xem trước các cú pháp đó, nhưng bạn nên kiểm tra xem bộ lập lịch của mình có chấp nhận hay không. Cần chuyển thời điểm chạy sang giá trị epoch? Hãy thử Unix Timestamp Converter hoặc Time Zone Converter.
Cũng được tìm dưới tên: tạo biểu thức cron, cron generator, giải thích cron, cú pháp cron, crontab guru, lịch cron, cron job, trình phân tích cron.
Các công cụ dùng kèm tốt với Trình tạo Cron Expression
- Trình tạo systemd Service — Chạy ứng dụng của bạn như một dịch vụ Linux đúng chuẩn, tự khởi động cùng hệ thống và tự restart khi bị crash.
- Máy tính khoảng cách ngày — Đếm số ngày giữa hai ngày, bao gồm ngày làm việc và bảng chia theo năm/tháng/ngày.
- Kiểm tra Regex — Nhập mẫu và xem các kết quả khớp được tô sáng ngay trong văn bản thử nghiệm.
- Định dạng HTML — Dán mã HTML đã nén hoặc lộn xộn và nhận lại HTML được thụt lề rõ ràng, nhất quán — bao gồm cả các khối <style> và <script> nhúng bên trong.
Câu hỏi thường gặp
*/15 trong cron nghĩa là gì?
*/15 ở trường phút nghĩa là mỗi 15 phút, bắt đầu từ 0, tức là :00, :15, :30 và :45. 5-50/15 sẽ cho :05, :20, :35 và :50.Làm sao để chạy cron job mỗi 30 giây?
*/30 * * * * *), hoặc thêm hai dòng crontab, trong đó dòng thứ hai bắt đầu bằng sleep 30;.Thời gian của cron là UTC hay giờ địa phương?
CRON_TZ). GitHub Actions, Kubernetes (mặc định) và hầu hết bộ lập lịch đám mây tính biểu thức theo UTC. Danh sách lần chạy ở đây có thể hiển thị theo cả hai cách.Sự khác nhau giữa @daily và 0 0 * * * là gì?
@daily (hoặc @midnight) là cách viết tắt của 0 0 * * *. Tương tự, @hourly = 0 * * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * * và @yearly = 0 0 1 1 *.Làm sao để lên lịch tác vụ vào ngày cuối cùng của tháng?
L nếu bộ lập lịch hỗ trợ (0 0 L * *), hoặc chạy hằng ngày từ ngày 28 đến 31 rồi kiểm tra ngày trong lệnh: 0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && ./job.sh.Tại sao biểu thức của tôi không bao giờ chạy?
0 0 31 2 * (31 tháng 2) hoặc 0 0 31 4 * (31 tháng 4) sẽ không bao giờ khớp. Danh sách lần chạy tiếp theo sẽ hiển thị cảnh báo khi không tìm thấy lần chạy nào trong mười năm tới.