Toolyard

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

Пять полей

Выражение cron — это пять полей через пробел, которые говорят планировщику, когда запускать задание:

По порядку, слева направо:

Минута0-59
Час0-23
День месяца1-31
Месяц1-12
День недели0-6 (воскресенье = 0)

Задание запускается, когда текущее время совпадает со всеми полями.

Специальные символы

  • * — любое значение.
  • , — список: 1,15 — 1-е и 15-е число.
  • - — диапазон: 1-5 в последнем поле — с понедельника по пятницу.
  • / — шаг: */10 в поле минут — каждые 10 минут.

Распространённые расписания

*/5 * * * *Каждые 5 минут
0 * * * *Каждый час, ровно в начале часа
0 0 * * *Каждый день в полночь
30 8 * * 1-5В 08:30 по будням
0 0 1 * *В полночь 1-го числа каждого месяца
0 3 * * 0В 03:00 каждое воскресенье

Вставьте любое выражение в Расшифровка выражений cron, чтобы прочитать его простыми словами и увидеть ближайшие запуски.

На чём часто ошибаются

  • Часовой пояс: cron использует часы сервера, а они часто в UTC.
  • День месяца и день недели вместе: если заданы оба, задание запускается, когда совпадает любое из них, а не оба.
  • Секунды: в стандартном cron нет поля секунд. Некоторые системы, например Quartz и Spring, добавляют его в начало, и полей становится шесть.

Выражения, которые делают не то, что кажется

ВыражениеЗадуманоНа самом деле запускается
0 9 1-7 * 1В 09:00 в первый понедельникВ 09:00 в каждый из дней с 1 по 7 и в каждый понедельник
*/15 9-17 * * 1-5Каждые 15 минут с 9 до 17С 09:00 до 17:45 по будням, включая час с 17:00
0 0 31 * *В последний день месяцаТолько в семи месяцах, где 31 день
0 0 29 2 *Раз в годТолько в високосные годы

Для первого понедельника запускайте в дни с 1 по 7 и проверяйте день недели внутри скрипта.

Сокращения

Многие версии cron принимают сокращения: @hourly, @daily, @weekly, @monthly, @yearly и @reboot, который запускается один раз при старте машины.

Летнее время

На сервере, живущем по местному времени, задача между 01:00 и 03:00 может пропуститься в ночь перевода часов вперёд или выполниться дважды при переводе назад, в зависимости от версии cron. Ставьте важные задачи вне этих часов или держите сервер в UTC.

Инструменты из этого руководства

Другие руководства