Парсер Cron-выражений

Cron-выражения определяют расписания повторяющихся задач в Unix-подобных системах. Этот инструмент разбирает синтаксис cron (5-7 полей), объясняет каждое поле на понятном языке, вычисляет следующие запланированные запуски и предупреждает о распространённых ошибках. Поддерживает как формат пользовательского crontab, так и системный формат crontab с полями пользователя и команды.

Спецификации

Типичные сценарии использования

  • Отладка причин, по которым cron-задание не запускается в ожидаемое время
  • Понимание унаследованных cron-выражений в конфигурации
  • Планирование расписаний резервного копирования и обслуживания
  • Проверка расписаний CI/CD-конвейеров (GitHub Actions, GitLab CI)
  • Тестирование расписаний Kubernetes CronJob перед развёртыванием
  • Анализ записей системного crontab из /etc/crontab или /etc/cron.d/

Возможности

  • Разбор 5-полевых (стандартных), 6-полевых (с секундами) и 7-полевых (с секундами и годом) cron-выражений
  • Поддержка системного формата crontab с полем пользователя (напр., "0 5 * * * root /path/to/script")
  • Извлечение и отображение команды из строк cron
  • Объяснение каждого поля на понятном языке
  • Вычисление следующих 10 запланированных запусков
  • Поддержка диапазонов (1-5), списков (1,3,5), шагов (*/15) и имён (MON, JAN)
  • Предупреждение о распространённых проблемах, например, указании дня 31 в расписании

Примеры

Каждый будний день в 9 утра

Попробовать →

Запускается в 9:00 с понедельника по пятницу.

0 9 * * 1-5

Каждые 15 минут

Попробовать →

Запускается на 0, 15, 30 и 45 минутах каждого часа.

*/15 * * * *

Системный Crontab с пользователем и командой

Попробовать →

Ежедневное резервное копирование в 5 утра от имени root (формат системного crontab из /etc/crontab).

0 5 * * * root /usr/bin/backup.sh

Cron с командой (пользовательский Crontab)

Попробовать →

Проверка состояния каждые 5 минут (формат пользовательского crontab).

*/5 * * * * curl -s http://localhost/health

Ежемесячно первого числа

Попробовать →

Запускается в полночь первого числа каждого месяца.

0 0 1 * *

Советы

  • Пять полей — это: минута (0-59), час (0-23), день месяца (1-31), месяц (1-12), день недели (0-6, воскресенье=0).
  • Системный crontab (/etc/crontab, /etc/cron.d/*) имеет 6-е поле для имени пользователя перед командой.
  • Пользовательские crontab (crontab -e) не имеют поля имени пользователя; они запускаются от имени владельца crontab.
  • Используйте * для «каждый» и */n для «каждый n-й».
  • Названия дней (SUN-SAT) и месяцев (JAN-DEC) нечувствительны к регистру.
  • Будьте осторожны с одновременным указанием дня месяца и дня недели; поведение зависит от реализации.

Описание Парсер Cron-выражений

Cron — это планировщик задач по расписанию в Unix-подобных операционных системах, а cron-выражения — это компактный синтаксис для определения времени запуска задания. Стандартный формат из пяти полей задаёт минуту (0-59), час (0-23), день месяца (1-31), месяц (1-12) и день недели (0-6, где 0 — воскресенье). Звёздочка (*) соответствует всем значениям, поэтому "* * * * *" выполняется каждую минуту.

Помимо простых значений, cron поддерживает несколько операторов. Диапазоны (1-5) соответствуют непрерывному интервалу. Списки (1,3,5) соответствуют отдельным значениям. Шаговые значения (*/15) создают регулярные интервалы. Их можно комбинировать: 1-5/2 в поле дня недели означает понедельник, среда, пятница. Поля месяца и дня недели принимают трёхбуквенные названия (JAN-DEC, SUN-SAT).

Реализации cron различаются. Пользовательские crontab имеют пять полей плюс команду. Системные crontab добавляют поле имени пользователя. Некоторые реализации поддерживают шестое поле для секунд (Spring, Quartz, Kubernetes) и седьмое для года. AWS EventBridge, GitHub Actions и другие облачные планировщики имеют свои собственные вариации.

Распространённые подводные камни включают взаимодействие полей дня месяца и дня недели: если оба указаны (не *), задание выполняется при выполнении любого условия (логика ИЛИ). Обработка часовых поясов — другая проблема: cron-задания выполняются в часовом поясе системы, если не установлен CRON_TZ, а переходы на летнее/зимнее время могут приводить к пропуску или двойному запуску заданий.

Оператор / создаёт шаговые значения. */5 в поле минут означает «каждые 5 минут» и даёт запуски на 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 и 55 минутах. Диапазоны можно комбинировать с шагами: 10-30/5 означает каждые 5 минут с 10-й по 30-ю минуту. Для запуска задания в определённое время в определённые дни установите поля минут и часов на нужное время, а поле дня недели — на нужные дни. Например, "30 14 * * 1-5" запускается в 14:30 с понедельника по пятницу, а "0 9 * * 0" — в 9 утра каждое воскресенье. Все времена интерпретируются в локальном часовом поясе сервера, если CRON_TZ не настроен явно.

Cron использует настенное время, что означает, что переходы на летнее/зимнее время могут вызвать неожиданное поведение. При переводе часов вперёд задания, запланированные между 2:00 и 2:59, могут быть полностью пропущены. При переводе часов назад задания в этом окне могут быть выполнены дважды. Для критически важных заданий установка CRON_TZ=UTC позволяет избежать этих проблем. Как альтернатива, избегайте планирования заданий во время перехода или делайте задания идемпотентными, чтобы повторные запуски были безвредны.

Синтаксис cron был принят далеко за пределами систем Unix. Kubernetes CronJobs, GitHub Actions, GitLab CI, AWS EventBridge, Google Cloud Scheduler, Spring @Scheduled и многие библиотеки очередей задач используют cron-выражения для планирования. Однако каждая реализация может поддерживать разные функции — некоторые добавляют поле секунд, некоторые — поле года, а некоторые используют ? для обозначения «без конкретного значения» в полях дня месяца или дня недели.

← Вернуться ко всем инструментам