§

Nhập biểu thức cron hoặc chọn mẫu có sẵn bên dưới.

Mẫu nhanh:
§

10 lần chạy tiếp theo

cron

Lịch dạng đọc được hiển thị ở đây...

    §

    Trình tạo biểu thức

    Các lập trình viên Việt Nam gặp cú pháp cron ở mọi tầng của hệ thống: AWS EventBridge Scheduler nhận biểu thức cron để kích hoạt Lambda, tài nguyên Kubernetes CronJob dùng cú pháp năm trường trên mọi cụm EKS và GKE, và GitHub Actions đọc trực tiếp từ `.github/workflows/*.yml`. Điểm khó là các nền tảng này không đồng nhất về các trường hợp biên. EventBridge thêm trường thứ sáu cho năm và yêu cầu `?` thay vì `*` ở một trong hai trường ngày. Kubernetes chạy theo UTC trừ khi bạn đặt `spec.timeZone` rõ ràng. GitHub Actions chạy UTC hoàn toàn, không có tùy chọn ghi đè. Công cụ này phân tích bất kỳ biến thể nào bạn dán vào, hiển thị mười lần kích hoạt tiếp theo theo múi giờ IANA bạn chọn, và cho phép bạn tạo biểu thức mới từng trường một để kiểm tra lịch trước khi đưa lên môi trường sản xuất.

    Biểu thức cron là gì?

    Biểu thức cron là một chuỗi lên lịch nhỏ gọn cho bộ lập lịch biết chính xác khi nào cần kích hoạt một tác vụ. Định dạng này ra đời năm 1975 trong daemon cron Unix V7 và gần như không thay đổi kể từ đó — cùng ngữ pháp năm trường xuất hiện ngày nay trong Kubernetes CronJobs, AWS EventBridge, GitHub Actions workflows, Google Cloud Scheduler, GitLab CI, Jenkins pipelines, và tệp nhị phân crontab vẫn được đóng gói trong mọi bản phân phối Linux. Ngữ pháp này gói rất nhiều ý nghĩa vào khoảng mười ba ký tự, đó là lý do tại sao một trình phân tích chuyển đổi nó thành tiếng Anh thông thường là sự khác biệt giữa một lần triển khai tự tin và một lần khôi phục lúc 3 giờ sáng.

    Biểu thức cron hoạt động như thế nào?

    Một biểu thức cron chuẩn có năm trường phân cách bằng khoảng trắng cùng nhau định nghĩa một lịch lặp lại. Công cụ kiểm tra đồng hồ thực tế so với biểu thức mỗi phút và kích hoạt công việc khi cả năm trường đều khớp. Các trường, từ trái sang phải:

    1. Phút (0–59). Phút nào trong giờ công việc chạy. 0 là đúng giờ, 30 là nửa giờ, */5 là mỗi năm phút (00, 05, 10, ...), và 15,45 là lúc 15 và 45 phút.
    2. Giờ (0–23). Giờ nào trong ngày theo đồng hồ 24 giờ. 0 là nửa đêm, 9 là 9 giờ sáng, 17 là 5 giờ chiều. Phạm vi (9-17 cho giờ làm việc) và giá trị bước (*/2 cho mỗi hai giờ) hoạt động giống như đối với phút.
    3. Ngày trong tháng (1–31). Ngày lịch nào để chạy. 1 là ngày 1 của tháng, * là mỗi ngày, 1,15 là ngày 1 và 15. Cẩn thận với 31 — nó tự động bỏ qua các tháng không có ngày 31.
    4. Tháng (1–12 hoặc JAN–DEC). Tháng nào để chạy. * là mỗi tháng, 1,7 là tháng 1 và tháng 7, 1-3 là chỉ quý 1. Tên tháng ba chữ cái không phân biệt hoa thường trong hầu hết các triển khai.
    5. Ngày trong tuần (0–7, trong đó cả 0 và 7 đều là Chủ nhật). Giới hạn kích hoạt vào các ngày cụ thể trong tuần. 1-5 là Thứ hai đến Thứ sáu, 0,6 là cuối tuần, MON-FRI hoạt động trong hầu hết các trình phân tích. Khi cả ngày trong tháng và ngày trong tuần đều được đặt thành giá trị cụ thể, cron cổ điển kích hoạt khi có bất kỳ kết quả khớp nào (OR logic), điều này khiến mọi người ngạc nhiên mỗi lần.

    Tại sao dùng trình phân tích biểu thức cron?

    • Phát hiện sai sót thầm lặng trước khi triển khai. Biểu thức `0 2 */3 * *` kích hoạt lúc 2 giờ sáng cứ mỗi ba ngày, không phải mỗi ba phút — dán vào đây và bạn sẽ thấy điều đó bằng tiếng Anh thông thường trước khi đưa lên sản xuất.
    • Hầu hết các bộ lập lịch đám mây chạy theo UTC theo mặc định. Xem trước mười lần kích hoạt tiếp theo theo múi giờ của bạn sẽ phát hiện sự lệch một giờ do DST trước khi ai đó bị gọi lúc 3 giờ sáng.
    • Các phím tắt như `@daily`, `@weekly` và `@monthly` tiện lợi nhưng mơ hồ. Trình phân tích hiển thị dạng năm trường bên dưới để bạn biết chính xác những gì đã được lên lịch.
    • Trình tạo từng trường cho phép bạn soạn lịch theo từng cột và xem mô tả cập nhật trực tiếp, nhanh hơn nhiều so với đọc lại trang man của cron lần thứ mười.

    Biểu thức cron được dùng ở đâu?

    Cú pháp cron xuất hiện ở bất kỳ đâu cần lặp lại một công việc theo đồng hồ. Ba bề mặt phổ biến nhất, với điểm khó nổi tiếng của từng cái:

    • Lịch sao lưu. Mục `crontab -e` cổ điển kết xuất cơ sở dữ liệu sang S3 lúc 2 giờ sáng hàng đêm, hoặc xoay vòng lưu trữ `pg_dump` vào ngày 1 mỗi tháng. Dòng như `0 2 * * * /usr/local/bin/backup.sh` đã được triển khai trên nhiều máy chủ Linux hơn bất kỳ dòng cron nào khác trong lịch sử. Đặt đúng phút và giờ, chuyển hướng stderr đến nơi bền vững, và bạn đã thay thế danh sách kiểm tra thủ công bằng một script tự động.
    • Trigger `schedule` của GitHub Actions. Khóa `on.schedule.cron` trong `.github/workflows/*.yml` chấp nhận cron năm trường chuẩn, nhưng công việc luôn chạy theo UTC và GitHub sẽ tự động bỏ qua lần kích hoạt nếu hàng đợi runner bận. Mẫu phổ biến: `cron: '0 9 * * 1-5'` để gửi bản tóm tắt Thứ hai đến Thứ sáu lúc 9 giờ sáng UTC. Xem trước ở đây theo múi giờ của bạn trước để đảm bảo không hứa hẹn bản tóm tắt 9 giờ sáng nhưng thực tế đến lúc 4 giờ chiều giờ Việt Nam.
    • AWS EventBridge Scheduler. Biểu thức cron của EventBridge lấy trường thứ sáu cho năm và yêu cầu `?` thay vì `*` ở trường ngày trong tháng hoặc ngày trong tuần — `cron(0 9 ? * MON-FRI *)` là bản dịch EventBridge của cron chuẩn ngày làm việc lúc 9 giờ sáng. Dùng cho các lần gọi Lambda theo lịch, chạy tác vụ ECS và bắt đầu state machine Step Function; sự không đồng nhất với cú pháp cron cổ điển là nguyên nhân số một gây lỗi `ValidationException` trong các lần triển khai CloudFormation.

    Biểu thức cron thực tế trông như thế nào?

    Xét 0 9 * * 1-5 — kích hoạt lúc 9:00 sáng, mỗi ngày làm việc. Đọc các trường từ trái sang phải: 0 là phút thứ 0 của giờ, 9 là 9 giờ sáng theo đồng hồ 24 giờ, * ở ngày trong tháng nghĩa là mỗi ngày lịch, * ở tháng nghĩa là mỗi tháng, và 1-5 ở ngày trong tuần giới hạn kích hoạt vào Thứ hai đến Thứ sáu (trong đó 1 = Thứ hai theo cách đánh số cron chuẩn). Dán vào ô nhập liệu trên và trình phân tích xác nhận Lúc 09:00 sáng, Thứ hai đến Thứ sáu với mười ngày kích hoạt tiếp theo theo múi giờ IANA bạn chọn. Cùng ý định này trong cú pháp AWS EventBridge là cron(0 9 ? * MON-FRI *) — lưu ý trường năm ở cuối và ? thay cho * trong cron chuẩn. Cùng ý định dưới dạng biểu thức Quartz (sáu trường với giây ở đầu) là 0 0 9 ? * MON-FRI. Ba nền tảng khác nhau, ba dạng biểu diễn khác nhau, một lịch cơ bản.

    Biểu thức cron không tha thứ theo đúng một cách: một lỗi đánh máy cho bạn một lịch hợp lệ về mặt cú pháp nhưng kích hoạt vào thời điểm sai, không có lỗi nào để bắt trong code review. Đọc `0 0 1 * *` và biết rằng nó chạy vào nửa đêm ngày 1 mỗi tháng, không phải ngày 1 tháng 1, cần thực hành. Trình phân tích trên chuyển việc thực hành đó thành kiểm tra mười giây — dán biểu thức, đọc tiếng Việt, xem mười lần kích hoạt tiếp theo theo múi giờ của bạn, và triển khai YAML biết rằng dòng cron thực sự làm những gì commit message nói.

    Sự khác biệt giữa cron 5 trường và 6 trường là gì?

    Cron năm trường là ngữ pháp Unix cổ điển với độ phân giải một phút. Cron sáu trường thêm cột giây ở đầu để lên lịch dưới một phút — dùng bởi Quartz và `@Scheduled` của Spring. AWS EventBridge cũng dùng sáu trường, nhưng cột thêm của nó là năm ở cuối, không phải giây.

    @hourly, @daily và @weekly có nghĩa gì?

    Biệt danh của Vixie-cron được giới thiệu năm 1987. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot kích hoạt một lần khi khởi động. GitHub Actions và EventBridge từ chối các alias này.

    Chủ nhật là ngày 0 hay ngày 7 trong cron?

    Cả hai, trong cron Vixie cổ điển — 07 đều được chấp nhận để phạm vi như 5-7 có thể đọc tự nhiên là Thứ sáu đến Chủ nhật. Thứ hai luôn là 1, Thứ bảy luôn là 6. Quartz và AWS EventBridge dùng quy ước khác: 1-7 với Chủ nhật là 1. Kiểm tra tài liệu nền tảng trước khi giả định.

    Cron xử lý giờ tiết kiệm ánh sáng ban ngày (DST) như thế nào?

    Phụ thuộc vào múi giờ của công cụ. Theo UTC (mặc định trên EventBridge, Kubernetes và GitHub Actions), DST không tồn tại. Trong múi giờ địa phương có DST, cron Vixie cổ điển bỏ qua công việc trong khoảng thời gian mùa xuân và chạy hai lần trong mùa thu; bộ định thời systemd kích hoạt đúng một lần.