Biểu thức cron là cách gọn gàng để mô tả lịch chạy lặp lại của một tác vụ, được dùng trong các hệ thống kiểu Unix từ những năm 1970. Năm trường cách nhau bằng dấu cách có thể diễn tả hầu như mọi lịch chạy đều đặn.
Năm trường của biểu thức
Một biểu thức cron chuẩn có dạng phút giờ ngày-trong-tháng tháng ngày-trong-tuần. Ví dụ, 30 14 * * 1 nghĩa là "lúc 14:30 mỗi thứ Hai" — dấu sao có nghĩa là "bất kỳ giá trị nào" cho ngày trong tháng và tháng.
Ý nghĩa của dấu gạch chéo và dấu phẩy
Dấu gạch chéo sau dấu sao, như trong */15 * * * *, có nghĩa là "cứ mỗi 15 đơn vị" — trong trường hợp này là mỗi 15 phút. Dấu phẩy cho phép liệt kê nhiều giá trị cụ thể; ví dụ, 0 9,18 * * * chạy tác vụ hai lần một ngày: lúc 9:00 và 18:00.
Vì sao trường "ngày trong tuần" hay gây nhầm lẫn nhất
Trong cron chuẩn, cả trường "ngày trong tháng" lẫn "ngày trong tuần" đều có thể được đặt khác dấu sao cùng lúc — trong trường hợp đó, tác vụ chạy nếu ít nhất một trong hai điều kiện khớp (phép HOẶC logic, không phải VÀ), điều này trái với suy nghĩ trực quan của hầu hết mọi người.
Cùng một cú pháp, từ crontab đến CronJob của Kubernetes
Nửa thế kỷ sau khi ra đời trên Unix, chính cú pháp năm trường này được dùng lại nguyên vẹn trong đối tượng CronJob của Kubernetes — nền tảng rất phổ biến trong ngành gia công phần mềm và outsourcing DevOps đang phát triển mạnh tại Việt Nam. Một lịch như 0 3 * * * trong manifest CronJob mang ý nghĩa hoàn toàn giống với crontab Unix từ những năm 1980.
Vì sao cần điều này
- Giải mã biểu thức cron của người khác trong cấu hình máy chủ hoặc pipeline CI/CD.
- Kiểm tra một lịch chạy đã viết có đúng không trước khi triển khai lên production.
- Lên kế hoạch thời gian chính xác cho vài lần chạy tiếp theo của một tác vụ.
Giờ mùa hè/mùa đông và cron
Nếu bộ lập lịch chạy ở múi giờ có chuyển đổi giờ mùa hè, một tác vụ được lên lịch vào giờ không tồn tại (ví dụ 2:30 sáng vào đêm vặn đồng hồ tiến lên) có thể không chạy vào ngày hôm đó, còn tác vụ được lên lịch vào giờ lặp lại khi vặn đồng hồ lùi có thể chạy hai lần. Việt Nam không áp dụng giờ mùa hè nên vấn đề này chỉ phát sinh khi phối hợp với máy chủ ở nước ngoài — vì vậy các tác vụ quan trọng thường được đặt vào thời điểm nằm ngoài khung giờ chuyển đổi thông thường (ví dụ nửa đêm hoặc 3-4 giờ sáng) hoặc dùng múi giờ UTC một cách rõ ràng.