Cron-выражения простыми словами: от «*/5 * * * *» до будней в 9:00
«Пусть отчёт собирается каждое утро в девять» — а в настройках планировщика пишется загадочное «0 9 * * *». Cron существует полвека, и его синтаксис не стал дружелюбнее. Но на самом деле вся магия — пять полей через пробел. Сейчас научимся их читать.
Пять полей: минута, час, день, месяц, день недели
Слева направо: минута (0–59), час (0–23), день месяца (1–31), месяц (1–12), день недели (0–7, где и 0, и 7 — воскресенье). Звёздочка означает «каждое значение этого поля». Запись «0 9 * * *» читается: ноль минут, девятый час, в любой день — то есть каждый день в 09:00.
*/5 * * * * — каждые 5 минут
0 9 * * 1-5 — по будням в 9:00
0 9 1 * * — 1-го числа каждого месяца в 9:00
30 8 * * 0 — по воскресеньям в 8:30
0 0 1 1 * — раз в год, 1 января в полночьСпецсимволы, которые встречаются чаще всего
- запятая — список значений: «0,15,30,45» — в нулевую, пятнадцатую, тридцатую и сорок пятую минуту;
- дефис — диапазон: «9-17» — с девяти до семнадцати часов;
- слэш — шаг: «*/10» — каждые 10 единиц; «10-40/5» — от 10 до 40 с шагом 5.
Подводный камень с часовыми поясами
Cron сервера живёт по системному времени машины, а на большинстве серверов это UTC. «Каждый день в 9:00» по UTC — это полдень по Москве зимой и час дня летом. Если задача должна срабатывать по местному времени, либо выставляйте пояс сервера, либо подбирайте час с поправкой — и обязательно проверьте фактическое время первого запуска.
Как проверить расписание заранее
Не нужно ждать полуночи, чтобы понять, сработает ли «30 8 * * 0» (спойлер: это воскресенье, 8:30). Вставьте выражение в парсер cron: он переводит его в человеческий язык и показывает список следующих запусков — сразу видно, совпадает ли задуманное с написанным.