- Главная
- Бесплатные инструменты
- Конструктор cron-выражений
Генератор cron-выражений
Составьте cron-выражение из готовых шаблонов или полей, прочитайте его простым языком и посмотрите пять ближайших запусков. Бесплатно, без регистрации.
Ближайшие 5 запусков
Строка crontab с heartbeat для этого расписания:
Узнайте, когда это задание перестанет запускатьсяСоздайте для задания heartbeat-адрес в Tenium и задайте период и запас времени, соответствующие этому расписанию. Пропустили пинг — получили оповещение.
Начать бесплатноЧитаем пять полей
Стандартная запись в crontab состоит из пяти полей в неизменном порядке: минута (0-59), час (0-23), день месяца (1-31), месяц (1-12) и день недели (0-6, где и 0, и 7 означают воскресенье). Звёздочка совпадает с любым значением, запятая перечисляет значения, дефис задаёт диапазон, а косая черта — шаг. Генератор понимает также названия месяцев и дней недели, например Mon-Fri и Jan.
Возьмём */15 9-17 * * 1-5. Поле минут срабатывает в 0, 15, 30 и 45; поле часов допускает часы с 9 до 17; последнее поле ограничивает расписание днями с понедельника по пятницу. Это четыре запуска в час на протяжении девяти часов, то есть 36 запусков в день, и последний из них в 17:45, а не в 18:00, ведь диапазон часов заканчивается на 17. Кто хочет «до 18:00», обычно нуждается в 9-17 плюс отдельной записи 0 18.
Ошибки, которые заметит предпросмотр
Список следующих пяти запусков — самый быстрый способ найти выражение, которое означает не то, что вы имели в виду:
- */7 в поле минут срабатывает в 0, 7, 14 и далее до 56, а затем снова в 0, поэтому на границе часа возникает разрыв в 4 минуты. Шаги, которые не делят 60 нацело, никогда не дают равных интервалов.
- 0 9 1 * 1 не означает «первый понедельник». Когда ограничены и день месяца, и день недели, стандартный cron запускает задание по любому совпадению, так что оно сработает 1-го числа и в каждый понедельник.
- Шаг на отдельном числе, например 5/15, начинается с 5 и считает по 15 (5, 20, 35, 50). Некоторые реализации cron его отклоняют, поэтому для переносимости пишите 5-59/15.
- 0 0 29 2 * показывает «Нет запусков в течение ближайшего года», если в ближайшие двенадцать месяцев нет 29 февраля, и это правильный ответ.
- Планировщики Quartz и Spring используют шесть или семь полей с секундами и символами вроде ? и L. Этот генератор рассчитан на пятипольный формат Unix и назовёт такие выражения некорректными.
Часовые пояса и летнее время
Cron вычисляет время по системному часовому поясу машины, а предпросмотр показывает следующие запуски в поясе вашего браузера, поэтому они могут не совпадать. Задание 0 3 * * * на сервере в UTC сработает в 05:00 по Таллину зимой и в 06:00 летом. Если сервер работает по местному времени, задание в час, который весной перескакивают (с 02:00 до 03:00), может быть пропущено или сдвинуто, а задание в час, который повторяется осенью, — выполниться дважды, в зависимости от реализации cron. Безопасная привычка: держать серверы в UTC и не планировать важные задания на промежуток 01:00-04:00 по местному времени.
Тихая поломка cron
Когда задание не запускается, cron ничего не сообщает. Демон остановился, сервер пересобрали без crontab, из-за проблемы с PATH команда падает, а вывод отправляется никому, или знак процента оставили без экранирования (в crontab символ % означает новую строку, если не написать \%). Задание просто перестаёт работать, и первым признаком становится отсутствующая резервная копия или пустой отчёт через несколько недель.
Heartbeat закрывает этот пробел. Heartbeat-монитор в Tenium задаётся периодом и запасом времени в секундах, а не выражением cron, поэтому расписание нужно перевести: ежедневное задание в 03:00 превращается в период 86400 и запас 7200, если оно может идти до двух часов. Еженедельное задание — это 604800. Задание только по будням требует осторожности, потому что между пятничным и понедельничным пингом 72 часа: либо задайте период в 3 суток, либо пусть вторая строка пингует каждый день. Строка внизу инструмента добавляет вызов curl после команды через &&, так что завершившееся ошибкой задание пинг не отправит. Подробнее — в разделе мониторинг cron-заданий.
Сколько heartbeat-мониторов вы получаете
Heartbeat-мониторы начинаются со Starter и считаются по тарифу: 20 на Starter, 100 на Pro и 500 на Agency. Серверу с десятком запланированных заданий вполне хватит тарифа Starter за $7 в месяц.
Вопросы об инструменте
Что означает */15 9-17 * * 1-5?
Каждые 15 минут (в :00, :15, :30, :45) в течение часов с 9 до 17, с понедельника по пятницу. Последний запуск каждый день в 17:45. Это 36 запусков в будний день и ни одного в субботу или воскресенье.
Почему задание сработало не в тот день, когда я указал и день месяца, и день недели?
Стандартный cron объединяет два поля дней через ИЛИ. Если ограничены оба, задание запускается при совпадении любого. Чтобы получить «первый понедельник», запускайте задание в дни 1-7 и проверяйте день недели внутри скрипта.
Использует ли cron мой часовой пояс?
Он использует часовой пояс машины, на которой работает демон, — на хостинговых серверах это часто UTC. Предпросмотр показывает следующие запуски в поясе вашего браузера, так что сравните его с выводом команды date на сервере.
Разбирает ли инструмент выражения Quartz или AWS EventBridge?
Нет. Он работает только с классическим пятипольным форматом Unix. Quartz добавляет поле секунд и специальные символы, а AWS EventBridge использует шесть полей с годом и обязательным знаком вопроса.
Как получить оповещение, когда cron-задание не запустилось?
Добавьте после команды запрос к heartbeat-адресу и задайте heartbeat-монитору период и запас времени. Если пинг не придёт до дедлайна, откроется инцидент. Шаблон показан в строке curl, сгенерированной под предпросмотром.