TanodTools
RU

Расшифровка cron-выражений

Прочитайте расписание crontab простым языком и получите список ближайших запусков в любом часовом поясе.

Работает полностью в браузере

Минута
Час
День месяца
Месяц
День недели

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

Оставьте пустым, чтобы начать с текущего момента.

    Стандартный cron из пяти полей (минута, час, день месяца, месяц, день недели), как в Vixie cron, cronie и большинстве систем Linux, а также сокращения вида @daily. Quartz и другие форматы с полем секунд распознаются, но не расшифровываются.

    Как проверить cron-выражение

    1. Введите или вставьте пять полей расписания, например */15 9-17 * * 1-5, или выберите пример. Подойдёт и целая строка crontab; команда после пятого поля игнорируется.
    2. Прочитайте описание простым языком и разбор каждого поля. Ошибка указывается в том поле, где она допущена.
    3. Посмотрите список ближайших запусков. Выберите часовой пояс, в котором работает сервер, и другое время начала, если хотите заглянуть вперёд.

    Как читать расписание cron

    Cron проверяет свою таблицу раз в минуту и запускает каждое задание, у которого все пять полей совпадают с текущим временем, с одним исключением для двух полей дней, описанным ниже. Так, */15 9-17 * * 1-5 означает: в минуты 0, 15, 30 и 45, в часы с 9 по 17, в любой день месяца, в любом месяце, с понедельника по пятницу. Последний запуск за день приходится на 17:45, потому что поле часа охватывает весь 17-й час.

    Расшифровщик разбирает каждое поле так же, как Vixie cron и cronie, которые поставляются в большинстве дистрибутивов Linux. Названия месяцев и дней недели принимаются в любом регистре, а 7 считается воскресеньем. Шаг после одного числа, например 5/10, читается как 5-59/10, как это делают многие версии cron; некоторые старые его отвергают, поэтому инструмент напоминает записать диапазон полностью. Диапазоны должны идти от меньшего к большему: FRI-MON помечается как ошибка, а не «заворачивается», потому что стандартный cron диапазоны не заворачивает.

    Время ближайших запусков вычисляется перебором по календарю в выбранном часовом поясе, поэтому выражение, которое может совпасть только 29 февраля, сразу находит ближайший високосный год, а то, которое не совпадёт никогда, например 0 0 31 2 *, помечается как никогда не выполняющееся.

    Советы

    Вопросы и ответы

    Что означают пять полей?

    По порядку: минута (0–59), час (0–23), день месяца (1–31), месяц (1–12 или JAN–DEC) и день недели (0–7 или SUN–SAT, где и 0, и 7 означают воскресенье). Каждое поле принимает одно значение, список вроде 1,15, диапазон вроде 9-17, шаг вроде */15 или 0-30/10 либо * для каждого значения.

    Почему задание выполняется в большее число дней, чем я ожидал?

    Когда ограничены и поле дня месяца, и поле дня недели, cron запускает задание в дни, подходящие под любое из них, а не под оба сразу. 0 9 1 * 1 выполняется 1-го числа каждого месяца и в каждый понедельник. Так ведут себя Vixie cron и cronie. Особенность того же правила: поле, начинающееся с *, например */2, считается неограниченным, и тогда должны совпасть оба поля.

    Какой часовой пояс использует cron?

    Часовой пояс машины или контейнера, на котором он запущен, если только crontab не задаёт CRON_TZ или TZ. Многие серверы работают по UTC, поэтому проверьте это, прежде чем доверять видимому времени. Выберите в списке пояс сервера, чтобы увидеть время запусков.

    Что происходит при переходе на летнее или зимнее время?

    Список следует за часами в выбранном поясе: время, пропускаемое при переводе часов вперёд, исключается, а время, которое наступает дважды при переводе назад, указывается один раз. Vixie cron и cronie запускают задание, назначенное на пропущенный час, вскоре после перехода и не повторяют задания в повторяющийся час; у других планировщиков поведение разное. Если в показанном периоде есть переход, появляется примечание.

    Поддерживаются ли секунды или синтаксис Quartz?

    Нет. Выражения из шести или семи полей либо с ?, L, W или # относятся к Quartz, Spring и подобным планировщикам, где первое поле — секунды. Инструмент сообщает об этом, а не гадает, потому что чтение таких выражений как стандартного cron дало бы неверное расписание.

    Что означают @daily, @hourly и другие сокращения?

    @hourly — это 0 * * * *, @daily и @midnight — 0 0 * * *, @weekly — 0 0 * * 0, @monthly — 0 0 1 * *, а @yearly и @annually — 0 0 1 1 *. @reboot выполняется один раз при запуске службы cron, поэтому у него нет времён для списка.