Конструктор Cron-выражений
КонвертацияСборка, проверка и разбор cron-выражений. Вычисляет следующий запуск (UTC).
- Следующий запуск (UTC)
- —
- Копировать
- —
На этой странице
Что такое cron-выражение?#
Cron-выражение — это компактное расписание, записанное пятью полями через пробел: минута час день-месяца месяц день-недели. Строка вида 0 9 * * 1-5 читается слева направо как «в минуту 0, час 9, каждый день месяца, каждый месяц, в дни с 1 по 5 (понедельник–пятница)» — то есть в 09:00 по будням. Каждая * означает «любое значение в этом поле», поэтому чем больше полей вы зафиксируете, тем точнее расписание; чем больше оставите как *, тем чаще оно срабатывает.
Cron — родной язык планировщика Linux crontab, GitHub Actions, Kubernetes CronJob, большинства CI-систем и бесчисленного множества планировщиков задач. Правильно записать выражение — полдела; вторая половина — особенность пары «день месяца / день недели» (см. FAQ ниже), на которой спотыкаются даже опытные инженеры. Эта страница разбирает пять полей по мере ввода, указывает конкретное поле с синтаксической ошибкой или ошибкой диапазона и вычисляет следующий запуск, чтобы вы могли убедиться, что расписание действительно срабатывает тогда, когда вы думаете.
Как пользоваться#
- Редактируйте поле Выражение вверху. При загрузке там
* * * * *(каждую минуту). - Под ним — пять выпадающих списков, по одному на поле (минута, час, день месяца, месяц, день недели). Каждый предлагает типовые фрагменты для этого поля (
*,*/5,0,1-5,0,6…); выбор вставляет значение в нужную позицию выражения, что удобно, когда вы не помните, в какой слот идёт*/15. - Строка шаблонов одним щелчком подставляет готовые стартовые расписания: каждую минуту, ежечасно, ежедневно, еженедельно, ежемесячно, ежегодно, по будням.
- Панель вывода показывает Следующий запуск (первый момент в текущее время или позже, который подходит) и строку состояния, которая либо подтверждает корректный разбор, либо называет проблемное поле. Нажмите 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 февраля) допустимо, но совпадает только в високосные годы, поэтому следующий запуск может отстоять на годы вперёд. Инструмент ограничивает поиск примерно восемью годами; выражение, которое не может совпасть в этом окне, помечается как недостижимое, а не «подвешивает» страницу.