Как пользоваться
- Введите или вставьте cron-выражение либо выберите одно из распространённых расписаний.
- Прочитайте объяснение простыми словами. Если поле указано неверно, вы увидите его название и причину ошибки.
- Проверьте время следующих 10 запусков в вашем часовом поясе. Если сервер работает в UTC, переключитесь на этот режим.
- Скопируйте время запусков, чтобы поделиться им, или измените выражение, чтобы настроить нужное расписание.
Как это работает
Стандартное cron-выражение, используемое в crontab в Linux (Vixie cron и cronie), а также во многих планировщиках CI и хостингов, состоит из пяти полей, разделённых пробелами: минуты (0–59), часы (0–23), день месяца (1–31), месяц (1–12 или JAN–DEC) и день недели (0–7 или SUN–SAT, где и 0, и 7 означают воскресенье). В каждом поле можно указать * для любого значения, отдельное значение, диапазон, например 1-5, список, например 1,15,30, или шаг, например */15 (каждое 15-е значение) или 9-17/2 (каждый второй час с 9 до 17). Названия не чувствительны к регистру. Сокращения @yearly (или @annually), @monthly, @weekly, @daily (или @midnight) и @hourly соответствуют выражениям 0 0 1 1 *, 0 0 1 * *, 0 0 * * 0, 0 0 * * * и 0 * * * *.
Поля дня месяца и дня недели работают по правилу, которое часто удивляет пользователей. Если хотя бы одно из полей начинается с *, день должен соответствовать обоим полям. Если оба поля ограничены, запуск происходит в день, который соответствует хотя бы одному из них: выражение 0 0 13 * 5 срабатывает 13-го числа каждого месяца и каждую пятницу, а не только в пятницу, 13-го. Поскольку проверяется, начинается ли поле с *, шаг, например */2, тоже считается неограниченным значением. Так работают Vixie cron и cronie; некоторые другие планировщики ведут себя иначе.
Время следующих запусков рассчитывается в часовом поясе вашего браузера или в UTC — именно его используют многие серверы и облачные планировщики. Сам cron использует часовой пояс машины, на которой он запущен. При переходе на летнее и зимнее время реальные демоны cron могут вести себя по-разному: этот инструмент не показывает местное время, которого не существует при переводе часов вперёд, и отображает повторяющийся час один раз. Расширенный синтаксис не поддерживается: выражения Quartz из шести или семи полей с секундами или годами, а также специальные символы ?, L, W и #.
Примеры
Проверка работоспособности в рабочее время
*/15 9-17 * * 1-5 означает запуск каждые 15 минут с 09:00 до 17:59 с понедельника по пятницу. Последний запуск каждого дня — в 17:45.
Ночное резервное копирование
30 2 * * * запускается каждый день в 02:30. Если сервер использует UTC, а вы находитесь в Нью-Йорке, список следующих запусков в режиме UTC покажет время по часовому поясу сервера.
Ловушка полей дня
0 9 1 * 1 может показаться расписанием «в 9:00 первого числа месяца, если это понедельник», но оно запускается в 09:00 первого числа каждого месяца, а также каждый понедельник. Чтобы запускаться только в первый понедельник, задайте 0 9 1-7 * * и проверяйте день недели в скрипте.
Часто задаваемые вопросы
Что означает */5 в cron?
Это означает каждое пятое значение поля, начиная с наименьшего. В поле минут */5 запускается в 0, 5, 10 … 55 минут. В поле часов */5 запускается в 0, 5, 10, 15 и 20 часов, поэтому промежуток с 20:00 до полуночи составляет четыре, а не пять часов.
Почему задача запускается чаще, чем я ожидал?
Если поля дня месяца и дня недели ограничены, cron запускается в дни, соответствующие любому из них. Например, 0 0 15 * 1 запускается 15-го числа и каждый понедельник. Чтобы учитывать только одно поле, укажите * в другом.
Какой часовой пояс использует cron?
Cron использует системный часовой пояс сервера, на котором запущен демон, если в crontab не задан CRON_TZ или TZ (поддерживается cronie). Облачные планировщики часто используют UTC по умолчанию. Включите режим UTC, чтобы увидеть время запусков на сервере с часовым поясом UTC.
Можно ли указать секунды или год?
В стандартном cron — нет: его точность составляет одну минуту, и он использует пять полей. Форматы из шести и семи полей с секундами и годами относятся к Quartz, Spring и похожим библиотекам и этим инструментом не поддерживаются.
Воскресенье — это 0 или 7?
Оба значения. В поле дня недели и 0, и 7 означают воскресенье, 1 — понедельник, а 6 — субботу. Также можно использовать трёхбуквенные названия дней от SUN до SAT.
Конфиденциальность
Выражение разбирается, а время запусков рассчитывается в вашем браузере. Введённые данные не загружаются на сервер, не сохраняются и не передаются в аналитику.