Cronwise

Основы cron-выражений: разбираем 5 полей

Понятное объяснение стандартного синтаксиса cron, которое вы можете применить немедленно

Попробовать расшифровщик cron

Почему cron-выражения сбивают с толку даже опытных разработчиков

Большинство ошибок cron возникают ещё до развёртывания, когда замысел расписания расходится с синтаксисом. Вы хотите, чтобы задача запускалась каждый будний день в 8 утра, но неверное значение сдвигает расписание на каждый час или каждый день месяца. Причина почти всегда одна: пять полей cron-выражения компактны, позиционны и не прощают ошибок.

Стандартное cron-выражение — это одна строка из пяти полей, разделённых пробелами. Каждое поле соответствует единице времени, и вместе они определяют повторяющееся расписание. По умолчанию нет меток, ключевых слов и пространства для двусмысленности после того, как планировщик прочитает строку.

Эта статья объясняет структуру 5-полевого формата cron на понятном языке. Вы узнаете, что контролирует каждое поле, как работают типовые токены и где возникают типичные ошибки прочтения. Каждый пример можно мгновенно проверить в расшифровщике cron Cronwise, который даёт описание на понятном языке и предварительный просмотр запусков с учётом часового пояса для любого введённого выражения.

Пишете ли вы первую запись в crontab или проверяете расписание, написанное другим человеком — понимание этих пяти полей является основой для любого дальнейшего рабочего процесса с cron.

Пять полей: за что отвечает каждое

Каждое стандартное cron-выражение следует одному позиционному формату. Слева направо пять полей:

ПозицияПолеДопустимые значенияОписание
1Минута0 – 59Минута часа, когда запускается задача
2Час0 – 23Час дня (24-часовой формат)
3День месяца1 – 31Календарный день
4Месяц1 – 12Месяц года
5День недели0 – 7День недели (0 и 7 оба означают воскресенье)

Конкретный пример делает сопоставление понятным. Выражение 30 8 * * 1-5 означает: на 30-й минуте, 8-го часа, каждый день месяца, каждый месяц, но только по будням с понедельника по пятницу. На понятном языке: 8:30, с понедельника по пятницу.

Звёздочка (*) — это подстановочный знак, который соответствует каждому допустимому значению поля. Когда вы видите её, читайте как «каждый». Таким образом, * * * * * означает каждую минуту каждого часа каждого дня — самое частое расписание, возможное в стандартном cron.

Типовые токены и их работа

Помимо подстановочного знака-звёздочки, поля cron поддерживают несколько токенов, которые позволяют выражать диапазоны, интервалы и списки без написания отдельных записей.

Запятая (список)

Запятая разделяет отдельные значения. 0 9,12,18 * * * срабатывает в 9:00, 12:00 и 18:00 каждый день. Каждое значение в списке обрабатывается независимо.

Дефис (диапазон)

Дефис определяет непрерывный диапазон. 0 9-17 * * * срабатывает в начале каждого часа с 9:00 до 17:00. Диапазоны включают обе границы.

Косая черта (шаг)

Косая черта определяет интервал. */15 * * * * срабатывает каждые 15 минут, начиная с минуты 0. Можно комбинировать диапазон с шагом: 0-30/10 * * * * срабатывает на минутах 0, 10, 20 и 30 каждого часа.

Комбинирование токенов

Токены можно смешивать в одном поле. 0 8-12,18 * * 1-5 запускается в начале часов с 8 по 12 и также в 18 часов, но только по будням. Каждое поле вычисляется независимо, и планировщик срабатывает, когда все пять полей совпадают одновременно.

Для более подробного разбора стратегий чтения читайте Как быстро читать cron-выражения — статью о ментальных моделях для быстрого разбора выражений.

Как интерпретировать реальные расписания

Правильное чтение cron-выражения означает перевод каждого поля по порядку и объединение их в одно предложение. Вот практические примеры с их описаниями на понятном языке:

ВыражениеЗначениеКогда использоватьПримечания о рисках
0 0 * * *Ежедневно в полночьЕжедневные пакетные задачи, ротация логовВысокая нагрузка, если много задач в этом слоте
*/5 * * * *Каждые 5 минутПроверки состояния, опрос очередейВысокая частота; убедитесь, что задача идемпотентна
0 9 1 * *В 9:00 1-го числа каждого месяцаЕжемесячные отчётыМесяцы с менее чем 31 днём работают нормально
30 2 * * 0В 2:30 каждое воскресеньеЕженедельное окно обслуживанияМожет совпасть с переходом на летнее время весной
0 */2 * * 1-5Каждые 2 часа по буднямОпрос в рабочее времяЗапускается в 0, 2, 4 … 22 — не только в рабочие часы

Последний пример — частая ошибка интерпретации. */2 в поле часа означает каждый второй час от 0, а не каждые два часа в рабочее время. Если вам нужно только с 9 до 17, используйте 0 9-17/2 * * 1-5. Именно такие тонкие ошибки расшифровщик Cronwise выявляет, показывая вам 10 ближайших запусков в вашем часовом поясе.

Крайние случаи и ограничения полей

5-полевой формат имеет границы, о которых легко забыть. Понимание их предотвращает скрытые сбои.

Взаимодействие дня месяца и дня недели

В стандартном cron, когда и день месяца (поле 3), и день недели (поле 5) установлены на значения, отличные от подстановочного знака, большинство реализаций рассматривают их как объединение: задача запускается, если любое из условий истинно. Это означает, что 0 9 15 * 1 не означает «15-е число, если это понедельник». Это означает «каждое 15-е число месяца и каждый понедельник». Это один из наиболее часто отмечаемых сюрпризов в cron.

Границы месяцев и дней недели

Установка дня месяца в 31 означает, что задача запустится только в месяцах с 31 днём (январь, март, май, июль, август, октябрь, декабрь). Короткие месяцы будут пропущены без предупреждения. Аналогично, значения дня недели 0 и 7 оба означают воскресенье, но их смешивание в одном выражении может вызвать путаницу при ревью кода.

Зависимость от часового пояса

Cron-выражение само по себе не содержит информации о часовом поясе. Планировщик интерпретирует время в том часовом поясе, в котором он настроен — это может быть UTC, местное время сервера или явно заданный часовой пояс. Если ваша команда работает в нескольких часовых поясах, всегда уточняйте настройку часового пояса планировщика перед развёртыванием. Cronwise позволяет выбрать любой часовой пояс IANA и просмотреть запуски соответственно.

Применяйте знания в рабочем процессе Cronwise

Когда вы освоили пять полей, следующий шаг — перейти от чтения cron-выражений к их уверенному созданию. Cronwise предлагает два дополняющих друг друга пути для этого.

Сначала расшифруйте, затем генерируйте

Начните с расшифровщика cron для проверки существующего выражения. Вставьте его, прочитайте описание на понятном языке и просмотрите таблицу запусков. Если расписание не соответствует вашему замыслу, переключитесь на генератор cron, чтобы визуально собрать правильное выражение поле за полем. Генератор устраняет угадывание синтаксиса, позволяя выбирать значения из выпадающих списков и вкладок.

Контрольный список проверки перед развёртыванием

ПроверкаПочему это важноКритерий прохождения
Описание на понятном языке совпадает с замысломВыявляет ошибки порядка полейПредложение-описание совпадает с вашей целью планирования
Метки времени запусков корректныВыявляет неправильное использование токенов (диапазоны, шаги)Первые 5 запусков совпадают с ожидаемыми датами и временем
Часовой пояс совпадает с целевой средойПредотвращает смещение выполнения на часыВыбранный часовой пояс совпадает с настроенным на планировщике
Нет предупреждений валидацииВыявляет рисковые паттерны на ранней стадииНоль предупреждений или каждое намеренно принято

Полное руководство по визуальному конструктору читайте в статье Визуальный генератор cron: пошаговый рабочий процесс, которая охватывает навигацию по вкладкам, сохранённые пресеты и опции экспорта.

Заключение: развёртывайте с уверенностью

5-полевой формат cron обманчиво прост: минута, час, день месяца, месяц и день недели. Его освоение означает знание не только позиций полей, но и того, как комбинируются токены, где скрываются крайние случаи и почему 10-секундная проверка валидации стоит усилий каждый раз.

Вот ключевые правила, которые стоит запомнить:

  • Читайте поля слева направо: минута, час, день, месяц, день недели.
  • Звёздочка означает «каждый» — это не заполнитель и не значение по умолчанию.
  • Диапазоны, списки и шаги можно комбинировать, но каждое поле вычисляется независимо.
  • День месяца и день недели образуют объединение, когда оба не являются подстановочными — а не пересечение.
  • Всегда проверяйте часовой пояс планировщика и просматривайте ближайшие запуски перед развёртыванием.

Cronwise создан для быстрой проверки. Вставьте выражение, прочитайте объяснение, проверьте запуски и развёртывайте с уверенностью. Смотрите все статьи по cron на Cronwise для продолжения обучения или переходите сразу к инструменту.