Инструменты
Руководства

Конструктор Cron-выражений

Конвертация

Сборка, проверка и разбор cron-выражений. Вычисляет следующий запуск (UTC).

100 % на клиенте Без бэкенда
Шаблоны
Вывод
Следующий запуск (UTC)
Копировать
На этой странице

Что такое cron-выражение?#

Cron-выражение — это компактное расписание, записанное пятью полями через пробел: минута час день-месяца месяц день-недели. Строка вида 0 9 * * 1-5 читается слева направо как «в минуту 0, час 9, каждый день месяца, каждый месяц, в дни с 1 по 5 (понедельник–пятница)» — то есть в 09:00 по будням. Каждая * означает «любое значение в этом поле», поэтому чем больше полей вы зафиксируете, тем точнее расписание; чем больше оставите как *, тем чаще оно срабатывает.

Cron — родной язык планировщика Linux crontab, GitHub Actions, Kubernetes CronJob, большинства CI-систем и бесчисленного множества планировщиков задач. Правильно записать выражение — полдела; вторая половина — особенность пары «день месяца / день недели» (см. FAQ ниже), на которой спотыкаются даже опытные инженеры. Эта страница разбирает пять полей по мере ввода, указывает конкретное поле с синтаксической ошибкой или ошибкой диапазона и вычисляет следующий запуск, чтобы вы могли убедиться, что расписание действительно срабатывает тогда, когда вы думаете.

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

  1. Редактируйте поле Выражение вверху. При загрузке там * * * * * (каждую минуту).
  2. Под ним — пять выпадающих списков, по одному на поле (минута, час, день месяца, месяц, день недели). Каждый предлагает типовые фрагменты для этого поля (*, */5, 0, 1-5, 0,6…); выбор вставляет значение в нужную позицию выражения, что удобно, когда вы не помните, в какой слот идёт */15.
  3. Строка шаблонов одним щелчком подставляет готовые стартовые расписания: каждую минуту, ежечасно, ежедневно, еженедельно, ежемесячно, ежегодно, по будням.
  4. Панель вывода показывает Следующий запуск (первый момент в текущее время или позже, который подходит) и строку состояния, которая либо подтверждает корректный разбор, либо называет проблемное поле. Нажмите now(), чтобы пересчитать относительно текущего момента.

Ключевые возможности#

  • Полная пятиполевая грамматика. Поддерживаются *, списки через запятую (0,15,30,45), диапазоны (1-5), шаги (*/15, 9-17/2) и имена месяцев/дней (JAN-DEC, SUN-SAT, без учёта регистра). 7 принимается для воскресенья и нормализуется в 0.
  • Корректная логика «день месяца / день недели». Реализовано стандартное правило Vixie-cron: когда ограничены оба поля, задача срабатывает, если совпало любое из них (логическое ИЛИ); когда ограничено только одно — должны совпасть оба (И). Многие наивные калькуляторы делают это неправильно.
  • Ошибки с точностью до поля. Неверный диапазон или случайная буква сообщаются с указанием конкретного поля (Минута, Час…), а не обобщённым «некорректное выражение».
  • Следующий запуск по UTC. Следующий момент вычисляется по компонентам UTC, поэтому результат детерминирован независимо от того, где загружена страница, и затем отображается обычной датой, которую можно скопировать.
  • Защита от недостижимых расписаний. Выражение, которое никогда не может совпасть (например, день месяца, которого ни в одном месяце нет), обнаруживается, а не заставляет страницу зациклиться.

Разбор примера#

Введите 0 9 * * 1-5 для утренней встречи по будням. Поле за полем: минута 0, час 9, день месяца *, месяц *, день недели 1-5. Поле даты (*) и поле дня недели (1-5) ограничены, но на самом деле ограничение наложено только на день недели — дата осталась шаблоном, — поэтому применяется путь И: сработает в 09:00 в дни с понедельника по пятницу. Следующий запуск покажет ближайший момент 09:00 UTC по будням.

Теперь сравните 0 0 1 * 1 — «минута 0, час 0, 1-е число месяца, каждый месяц, понедельник». Здесь ограничены оба поля — и день месяца (1), и день недели (1), поэтому cron выбирает путь ИЛИ: задача срабатывает 1-го числа каждого месяца и в каждый понедельник — а не «по понедельникам, которые выпали на 1-е число», что является почти повсеместным заблуждением. Панель Следующий запуск делает различие видимым: вы увидите, как момент переключается на ближайший понедельник, даже если он не 1-го числа.

FAQ#

Почему задача срабатывает в дни, которых я не ожидал?#

Почти всегда это взаимодействие «день месяца / день недели». Стандартный cron при ограничении обоих полей трактует их как ИЛИ: 0 0 1 * 1 означает «1-е число или любой понедельник», а не «1-е число только если это понедельник». Если нужно, чтобы задача выполнялась, только когда 1-е число является понедельником, сам cron этого выразить не может — поставьте расписание на 1-е число и добавьте проверку дня недели внутри скрипта.

Что означают */5 и 9-17/2?#

*/5 в поле минут означает «начиная с 0, каждое 5-е значение» → 0, 5, 10, 15, …, 55. 9-17/2 означает «в диапазоне от 9 до 17 каждое 2-е значение» → 9, 11, 13, 15, 17 — удобно для «каждые два часа в рабочее время». Делитель шага после / применяется к диапазону или шаблону, который стоит перед ним.

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

И то и другое. Поле дня недели принимает 0 и 7 для воскресенья (исторически cron использовал 0; некоторые системы добавили 7). Этот инструмент принимает оба варианта и нормализует 7 в 0. Имена тоже работают: SUN, Mon, fri — все без учёта регистра.

Выражение разбирается, но «Следующий запуск» выглядит далеко. Это ошибка?#

Скорее всего нет — обычно это значит, что расписание действительно не может сработать скоро. 0 0 29 2 * (29 февраля) допустимо, но совпадает только в високосные годы, поэтому следующий запуск может отстоять на годы вперёд. Инструмент ограничивает поиск примерно восемью годами; выражение, которое не может совпасть в этом окне, помечается как недостижимое, а не «подвешивает» страницу.