Cron-выражение — это компактный способ описать расписание повторяющегося запуска задачи, который используется в Unix-подобных системах ещё с 1970-х годов. Пять полей, разделённых пробелами, способны выразить практически любое регулярное расписание.
Пять полей выражения
Стандартное cron-выражение выглядит как минута час день-месяца месяц день-недели. Например, 30 14 * * 1 означает «в 14:30 каждый понедельник» — звёздочки означают «любое значение» для дня месяца и месяца.
Значение слешей и запятых
Слеш после звёздочки, как в */15 * * * *, означает «каждые 15 единиц» — в данном случае каждые 15 минут. Запятая позволяет перечислить несколько конкретных значений, например 0 9,18 * * * запускает задачу дважды в день: в 9:00 и 18:00.
Почему поле «день недели» путает чаще всего
В стандартном cron и поле «день месяца», и поле «день недели» могут быть одновременно указаны не как звёздочка — в этом случае задача запускается, если совпадает хотя бы одно из двух условий (логическое ИЛИ, а не И), что противоречит интуитивному ожиданию.
Cron жив и в Kubernetes
Спустя полвека после появления в Unix тот же пятиполевой синтаксис используется в объекте CronJob в Kubernetes — платформе, которую активно эксплуатируют и российские облачные провайдеры вроде Yandex Cloud. Расписание вида 0 3 * * * в манифесте CronJob значит ровно то же самое, что и в обычном crontab на сервере 1980-х годов.
Зачем это нужно
- Расшифровать чужое cron-выражение в конфигурации сервера или CI/CD-пайплайна.
- Проверить правильность написанного расписания перед деплоем в продакшн.
- Спланировать точное время следующих нескольких запусков задачи.
Переход на летнее/зимнее время и cron
Если планировщик работает в поясе с переходом на летнее/зимнее время, задача, запланированная на несуществующий час (например, 2:30 в ночь перевода часов вперёд), может не запуститься в этот день, а запланированная на час, который повторяется при переводе назад, — запуститься дважды. Поэтому для критичных задач часто выбирают время вне типичного окна перехода (например, полночь или 3-4 часа ночи) или явно фиксируют часовой пояс UTC.