TanodTools
VI

Giải thích biểu thức cron

Đọc lịch crontab bằng ngôn ngữ thông thường và liệt kê những lần chạy kế tiếp, ở bất kỳ múi giờ nào.

Chạy hoàn toàn trong trình duyệt của bạn

Phút
Giờ
Ngày trong tháng
Tháng
Ngày trong tuần

Những lần chạy kế tiếp

Để trống để bắt đầu từ bây giờ.

    Cron chuẩn năm trường (phút, giờ, ngày trong tháng, tháng, ngày trong tuần) như Vixie cron, cronie và hầu hết hệ thống Linux dùng, cùng các lối tắt kiểu @daily. Quartz và các định dạng có trường giây khác được nhận diện nhưng không được giải thích.

    Cách kiểm tra biểu thức cron

    1. Gõ hoặc dán năm trường của lịch, chẳng hạn */15 9-17 * * 1-5, hoặc chọn một ví dụ. Một dòng crontab đầy đủ cũng dùng được; lệnh sau trường thứ năm sẽ bị bỏ qua.
    2. Đọc phần tóm tắt bằng ngôn ngữ thông thường và phần phân tích từng trường. Lỗi được chỉ ra ngay ở trường xảy ra lỗi.
    3. Xem danh sách các thời điểm chạy kế tiếp. Chọn múi giờ mà máy chủ đang chạy, và một thời điểm bắt đầu khác nếu bạn muốn xem trước.

    Cách đọc một lịch cron

    Cron kiểm tra bảng của nó mỗi phút một lần và chạy mọi tác vụ có cả năm trường khớp với thời gian hiện tại, trừ một ngoại lệ cho hai trường ngày được mô tả bên dưới. Vì vậy */15 9-17 * * 1-5 nghĩa là: vào các phút 0, 15, 30 và 45, trong các giờ từ 9 đến 17, vào bất kỳ ngày nào của tháng, trong bất kỳ tháng nào, từ thứ Hai đến thứ Sáu. Lần chạy cuối cùng trong ngày là lúc 17:45, vì trường giờ bao gồm cả giờ 17.

    Công cụ giải thích phân tích từng trường theo cách Vixie cron và cronie làm, loại mà hầu hết các bản phân phối Linux đi kèm. Tên tháng và tên ngày trong tuần được chấp nhận ở mọi kiểu chữ và 7 được tính là Chủ nhật. Một bước nhảy sau một số đơn, như 5/10, được đọc là 5-59/10 theo cách nhiều phiên bản cron đọc; một số phiên bản cũ từ chối nó, nên công cụ nhắc bạn viết rõ khoảng ra. Khoảng phải chạy từ thấp lên cao: FRI-MON bị đánh dấu thay vì quay vòng, vì cron chuẩn không quay vòng các khoảng.

    Thời điểm chạy kế tiếp được tính bằng cách đi qua lịch theo múi giờ bạn chọn, nên một biểu thức chỉ có thể khớp vào ngày 29 tháng 2 sẽ tìm ra năm nhuận kế tiếp ngay lập tức, và biểu thức không bao giờ có thể khớp, như 0 0 31 2 *, được báo là không bao giờ chạy.

    Mẹo

    Câu hỏi thường gặp

    Năm trường có nghĩa là gì?

    Theo thứ tự: phút (0-59), giờ (0-23), ngày trong tháng (1-31), tháng (1-12 hoặc JAN-DEC) và ngày trong tuần (0-7 hoặc SUN-SAT, trong đó cả 0 và 7 đều là Chủ nhật). Mỗi trường nhận một giá trị đơn, một danh sách như 1,15, một khoảng như 9-17, một bước nhảy như */15 hoặc 0-30/10, hoặc * cho mọi giá trị.

    Vì sao tác vụ của tôi chạy vào nhiều ngày hơn tôi mong đợi?

    Khi cả trường ngày trong tháng và trường ngày trong tuần đều bị giới hạn, cron chạy vào những ngày khớp với một trong hai, chứ không phải cả hai. 0 9 1 * 1 chạy vào ngày mùng 1 hằng tháng và vào mọi thứ Hai. Đây là cách Vixie cron và cronie hoạt động. Một điểm lạ của cùng quy tắc: trường bắt đầu bằng *, như */2, được coi là không bị giới hạn, khi đó cả hai trường đều phải khớp.

    Cron dùng múi giờ nào?

    Múi giờ của máy hoặc container mà nó chạy trên đó, trừ khi crontab đặt CRON_TZ hoặc TZ. Nhiều máy chủ chạy theo UTC, nên hãy kiểm tra điều đó trước khi tin các thời điểm bạn thấy. Chọn múi giờ của máy chủ trong danh sách để xem thời điểm chạy của nó.

    Điều gì xảy ra khi đồng hồ đổi giờ mùa hè?

    Danh sách theo đồng hồ ở múi giờ bạn chọn: thời điểm bị bỏ qua khi đồng hồ chỉnh tiến lên sẽ bị loại, và thời điểm xảy ra hai lần khi đồng hồ chỉnh lùi chỉ được liệt kê một lần. Vixie cron và cronie chạy tác vụ được lên lịch trong giờ bị bỏ qua ngay sau khi đổi giờ và không lặp lại tác vụ trong giờ bị lặp; các trình lập lịch khác thì khác nhau. Một ghi chú xuất hiện khi khoảng thời gian được liệt kê có đổi giờ.

    Công cụ có hỗ trợ giây hoặc cú pháp Quartz không?

    Không. Biểu thức có sáu hoặc bảy trường, hoặc có ?, L, W hay #, đến từ Quartz, Spring và các trình lập lịch tương tự, nơi trường đầu tiên là giây. Công cụ báo như vậy thay vì đoán, vì đọc chúng như cron chuẩn sẽ cho lịch sai.

    @daily, @hourly và các lối tắt khác có nghĩa là gì?

    @hourly là 0 * * * *, @daily và @midnight là 0 0 * * *, @weekly là 0 0 * * 0, @monthly là 0 0 1 * *, còn @yearly và @annually là 0 0 1 1 *. @reboot chạy một lần khi dịch vụ cron khởi động, nên không có thời điểm nào để liệt kê.