Переходите с UptimeRobot? Импортируйте мониторы одним кликом по ключу API только для чтения.Начать бесплатно →
  1. Главная
  2. Бесплатные инструменты
  3. Конструктор 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, сгенерированной под предпросмотром.