Перейти к содержимому
LeedyBox
Поддержать

Разбор и конструктор выражений cron

Разбирайте выражения cron для Unix, Spring, Quartz и AWS, смотрите ближайшие запуски в любом часовом поясе или собирайте выражение по полям.

Примеры:

Расписание

Разбор по полям

ПолеВыражениеЗначения

Ближайшие запуски

    Визуальный конструктор

    Выберите, как повторяется каждое поле. «Конкретные значения» — список вроде 1,15 или MON,WED; «Диапазон» — от-до, например 9-17; «Каждые N» — шаг.

    Полученное выражение
    Специальные символы
    *Любое значение поля.
    ,Список значений, например 1,15,30.
    -Диапазон, например 9-17 или MON-FRI.
    /Шаг, например */15 = каждые 15; 5/15 = с 5 каждые 15 (не в Unix cron).
    ?Без конкретного значения. Quartz и AWS требуют его в поле дня месяца или дня недели.
    LПоследний: L в дне месяца = последний день; L-3 = за три дня до него; 5L в дне недели = последний четверг (нумерация Quartz).
    WБлижайший рабочий день: 15W = рабочий день, ближайший к 15-му; LW = последний рабочий день месяца.
    #N-й день недели в месяце: 6#3 = третья пятница в Quartz/AWS (1 = воскресенье); 5#3 в Spring (0 = воскресенье).
    @daily …Макросы: @yearly, @monthly, @weekly, @daily, @hourly; @reboot выполняется один раз при запуске.

    Проверяйте результаты перед использованием. Инструмент предоставляется «как есть», без гарантий, и результаты могут быть неполными или неверными. Условия использования

    Реализации cron различаются порядком полей, нумерацией дней недели и специальными символами. Ближайшие запуски вычисляются в браузере для выбранного часового пояса; проверьте расписание в системе, которая будет его выполнять.

    Как пользоваться

    1. Введите или вставьте расписание в поле «Выражение cron» либо нажмите один из готовых примеров — при этом в поле «Формат» также выбирается «Автоопределение». Описание и время запусков обновляются по мере ввода.
    2. Оставьте в поле «Формат» значение «Автоопределение» или выберите систему, для которой написано выражение. При автоопределении 5 полей читаются как Unix, а 7 — как Quartz. Для 6 полей выбирается AWS или Quartz в зависимости от положения "?", AWS — если последнее поле содержит год от 1970 до 2199, а в остальных случаях предполагается Spring. Макросы, например @weekly, читаются как Unix. Если выражение корректно, в строке состояния указывается использованный формат.
    3. Прочитайте блоки «Расписание» и «Разбор по полям», чтобы увидеть, каким значениям соответствует каждое поле, а затем проверьте даты в разделе «Ближайшие запуски». В поле «Часовой пояс» сначала выбран пояс вашего браузера; при необходимости выберите другой и укажите 5, 10 или 20 в поле «Сколько запусков показать». Для поясов, отличных от UTC, у каждого запуска также показывается время в UTC.
    4. Чтобы, наоборот, собрать выражение, откройте «Визуальный конструктор», выберите формат и укажите, как повторяется каждое поле, вводя значение там, где поле его требует. Кнопка «Использовать это выражение» копирует «Полученное выражение» в поле «Выражение cron», выбирает в поле «Формат» формат конструктора и разбирает выражение, чтобы вы могли проверить время запусков.

    Частые вопросы

    Отправляется ли куда-нибудь введённое выражение?

    Нет. Выражение разбирается, а время запусков вычисляется в вашем браузере с помощью JavaScript; в LeedyBox выражение не отправляется.

    Почему 0 0 13 * 5 срабатывает каждую пятницу, а не только в пятницу, 13-е?

    В Unix cron, если ограничены и день месяца, и день недели (ни одно из полей не начинается с *), день подходит, когда совпадает любое из этих полей, поэтому выражение срабатывает 13-го числа каждого месяца и каждую пятницу. Инструмент применяет это правило к выражениям Unix, и тогда в блоке «Расписание» указано «достаточно одного из двух». Для выражений Spring он требует совпадения обоих полей, а Quartz и AWS обходят этот вопрос, требуя "?" в одном из двух полей. В Unix cron обычно поступают так: планируют запуск на каждую пятницу и проверяют дату внутри задания.

    Воскресенье — это 0, 1 или 7?

    Зависит от формата. В выражениях Unix и Spring и 0, и 7 означают воскресенье, а 1 — понедельник; в Quartz и AWS 1 — это воскресенье, а 7 — суббота, поэтому там 1-5 означает дни с воскресенья по четверг. Названия дней, например MON-FRI, позволяют избежать этой разницы в Spring, Quartz и AWS.

    Почему не принимается моя строка crontab или выражение AWS cron( )?

    Вводите только поля расписания. Команда в конце строки crontab и имя пользователя в /etc/crontab считаются лишними полями, поэтому инструмент сообщает о недопустимом поле или неверном количестве полей. Для AWS вставьте шесть полей из скобок cron( ) без самой обёртки.

    Как переписать выражение Unix для Spring, Quartz или AWS?

    В Spring в начало добавляется поле секунд, поэтому 0 9 * * 1-5 превращается в 0 0 9 * * 1-5. Quartz также требует "?" в одном из полей дня и обозначает воскресенье как 1, поэтому то же расписание выглядит как 0 0 9 ? * MON-FRI. В AWS нет поля секунд, в одном из полей дня, как и в Quartz, нужен "?", а в конце добавляется год: 0 9 ? * MON-FRI *. Если выражение Unix ограничивает оба поля дня, оно опирается на описанное выше правило «одного из двух», которое эти форматы не используют, поэтому обычно нужны два расписания. Проверьте результат, выбрав целевой формат, и сравните ближайшие запуски.

    Почему инструмент сообщает, что время запуска не найдено?

    Выражение корректно, но примерно за 8 лет вперёд, которые просматривает инструмент, подходящее время не нашлось. Типичные причины — несуществующие даты, например 0 0 30 2 * (30 февраля) или 31-е число в сочетании только с месяцами из 30 дней, а также поле года, указывающее на прошлое. Год, отстоящий больше чем на 8 лет вперёд, даёт то же сообщение, хотя такое расписание позже всё же может сработать. Некоторые планировщики, включая классический Unix cron, принимают несуществующую дату без предупреждения, и задание просто не запускается.

    Какой часовой пояс используется и как учитывается летнее время?

    Время запусков вычисляется для пояса, выбранного в поле «Часовой пояс». Выберите тот, который использует ваш планировщик: crontab обычно следует часовому поясу сервера, правила по расписанию в AWS EventBridge используют UTC, а в EventBridge Scheduler часовой пояс можно задать. В меню есть часовой пояс вашего браузера, UTC и набор распространённых поясов; если пояса вашего планировщика там нет, выберите пояс с тем же смещением от UTC и теми же датами перехода на летнее время. Запуск во время, которое пропускается при переводе часов вперёд, в список не попадает, а время, которое при переводе часов назад наступает дважды, указывается один раз. Демоны cron обрабатывают эти часы по-разному: например, cronie может выполнить задание из пропущенного часа сразу после перевода. Проверьте поведение своего планировщика или используйте UTC, где нет перехода на летнее время.