Разбор cron-выражений - простыми словами
Разбор cron-выражения
Пять полей: минута, час, день месяца, месяц, день недели.
Поле за полем
| Поле | Записано | Значит |
|---|
Ближайшие запуски
| # | Запуск |
|---|
Время показано в часовом поясе вашего устройства. Сервер, где выполняется задача, может быть в другом.
Что делает этот инструмент
Синтаксис cron лаконичен и легко читается неверно, а цена неверного прочтения это задача, месяцами работающая не в то время, пока никто не замечает. Страница переводит строку обратно в предложение и, что полезнее, показывает реальные даты запуска.
Как пользоваться
- 1 Вставьте свою строку cron или начните с одной из заготовок.
- 2 Прочитайте предложение и проверьте каждое поле по очереди.
- 3 Сверьте со списком ближайших запусков: именно там видны ошибки.
Пять полей
Всегда в этом порядке и всегда через пробел. Каждое принимает число, список вида 1,15, диапазон вида 9-17, шаг вида */5 или звёздочку, означающую все значения.
| # | Поле | Допустимо | Примечание |
|---|---|---|---|
| 1 | Минута | 0-59 | — |
| 2 | Час | 0-23 | — |
| 3 | День месяца | 1-31 | См. правило дней ниже |
| 4 | Месяц | 1-12 | Также принимаются JAN-DEC |
| 5 | День недели | 0-7 | 0 и 7 это воскресенье; принимаются SUN-SAT |
Ловушка дня месяца
Когда и поле дня месяца, и поле дня недели заданы не звёздочкой, cron выполняет задачу, если совпадает любое из них, а не оба. Так «0 0 1 * MON» сработает и 1-го числа каждого месяца, и каждый понедельник. В первый раз это удивляет почти всех, и разбор об этом предупреждает.
Шаг это не «каждые N начиная с сейчас»
*/20 в поле минут означает минуты 0, 20 и 40 каждого часа, а не «через двадцать минут после прошлого запуска». Если запуск длится 25 минут, следующий всё равно начнётся на 40-й минуте. Шаг отсчитывается от начала диапазона, а 5-20/5 считает от 5.
Часовые пояса и исчезающие часы
Cron идёт по часам сервера, а не по вашим, поэтому задача на 02:30 может сработать в другое местное время, чем вы ждёте. Хуже того, там, где есть переход на летнее время, этот час однажды в году не наступает вовсе, а в другую ночь наступает дважды. То, что нельзя пропустить или повторить, планируйте вне 01:00-03:00.