Tài liệu & Hướng dẫn chuyên sâu: Trình mô phỏng lịch Cron (Cron Expression Visualizer)
1. Tổng quan & Nguyên lý hoạt động
Biểu thức Cron (5 trường: phút, giờ, ngày-trong-tháng, tháng, thứ-trong-tuần) là cú pháp lập lịch chuẩn trên mọi hệ thống Unix/Linux, crontab, GitHub Actions hay các job scheduler phổ biến, nhưng lại cực kỳ khó đọc trực quan — `0 22 * * 1-5` không nói lên điều gì nếu không tra cứu. Vấn đề còn nghiêm trọng hơn ở khía cạnh múi giờ: hầu hết server production chạy crontab theo giờ UTC bất kể lập trình viên đang ở múi giờ nào, dẫn đến tình huống kinh điển "tưởng job chạy lúc 10 giờ tối giờ của mình, hoá ra nó chạy lúc 10 giờ tối UTC — tức 5 giờ sáng hôm sau ở Việt Nam". Trình mô phỏng lịch Cron của Verdbench giải quyết cả hai vấn đề cùng lúc: dịch biểu thức sang câu mô tả tự nhiên bằng tiếng Việt, đồng thời tính sẵn các lần chạy kế tiếp (luôn coi biểu thức là lịch UTC — đúng mặc định server thực tế) và cho phép xem cùng những thời điểm đó quy đổi sang giờ thiết bị, hoặc bất kỳ múi giờ server phổ biến nào khác, qua một dropdown.
2. Ưu thế kiến trúc & Tính năng nổi bật
Biểu thức Cron được dịch thành câu mô tả đầy đủ bằng tiếng Việt hoặc tiếng Anh (vd. "Vào lúc 22:00, Thứ Hai đến Thứ Sáu"), dựa trên thư viện cronstrue với gói ngôn ngữ tiếng Việt chính thức.
Danh sách lần chạy kế tiếp luôn được TÍNH một lần duy nhất theo giờ UTC (đúng chuẩn server), sau đó dropdown múi giờ (giờ thiết bị, UTC, America/New_York, Europe/London, Asia/Tokyo...) chỉ đổi cách HIỂN THỊ cùng tập thời điểm đó qua Intl.DateTimeFormat — nên bạn luôn thấy đúng một lịch chạy, nhìn dưới nhiều múi giờ khác nhau.
Biểu thức sai cú pháp (sai số trường, giá trị ngoài phạm vi...) được phát hiện ngay bằng cron-parser và hiển thị thông báo lỗi rõ ràng thay vì một kết quả mô tả sai lệch.
3. Ký tự đặc biệt & cấu trúc biểu thức Cron
Mỗi trường trong biểu thức Cron chấp nhận các ký tự đặc biệt sau để biểu diễn tập giá trị — trong đó dấu `/` (bước nhảy) là ký tự lập trình viên hay quên ý nghĩa nhất:
| Ký tự | Ý nghĩa | Ví dụ | Giải thích |
|---|---|---|---|
| * | Mọi giá trị (any) | * * * * * | Khớp với mọi giá trị hợp lệ của trường đó — không ràng buộc gì |
| , | Danh sách (list) | 1,15,30 * * * * | Chạy vào đúng các giá trị được liệt kê: phút thứ 1, 15 và 30 |
| - | Khoảng giá trị (range) | 9-17 * * * * | Chạy trong khoảng liên tục từ 9 đến 17 (bao gồm cả hai đầu mút) |
| / | Bước nhảy (step) | */15 * * * * | Chạy lặp lại mỗi 15 đơn vị bắt đầu từ giá trị nhỏ nhất của trường (phút 0, 15, 30, 45) — ký tự dễ quên nhất! |
| ? | Không xác định | 0 0 1 * ? | Dùng ở trường ngày-trong-tháng hoặc thứ-trong-tuần khi trường còn lại đã được chỉ định cụ thể (phổ biến ở Quartz Scheduler) |
┌───────────── phút (0 - 59)
│ ┌───────────── giờ (0 - 23)
│ │ ┌───────────── ngày trong tháng (1 - 31)
│ │ │ ┌───────────── tháng (1 - 12)
│ │ │ │ ┌───────────── thứ trong tuần (0 - 6, 0 = Chủ Nhật)
│ │ │ │ │
* * * * *4. Câu hỏi thường gặp (FAQ)
Giải đáp các thắc mắc phổ biến của lập trình viên khi sử dụng tiện ích Trình mô phỏng lịch Cron (Cron Expression Visualizer).
5. Công cụ liên quan
- Tạo biểu thức CronChọn lịch chạy bằng giao diện trực quan, nhận biểu thức Cron cùng diễn giải và các lần chạy kế tiếp.
- Chuyển đổi Unix TimestampĐổi timestamp (giây/mili giây/micro giây) sang ngày giờ và ngược lại, theo múi giờ bạn chọn — xử lý hoàn toàn trên trình duyệt.
- Docker Run sang ComposeChuyển đổi lệnh docker run CLI thành file docker-compose.yml hoàn chỉnh, hỗ trợ đa dịch vụ, volume và mạng.