Crontab Guru

Вставьте cron-выражение и получите объяснение по каждому полю на простом английском: что именно оно делает. Не нужно запоминать порядок полей или искать диапазоны: Guru проходит по каждому из пяти полей (минута, час, день месяца, месяц и день недели) и читает выражение слева направо. Удобно, чтобы проверить строку crontab перед развёртыванием или объяснить доставшуюся строку.

Как пользоваться Guru

  1. 1

    Вставьте выражение

    Скопируйте любое стандартное cron-выражение из 5 полей (например, `0 9 * * 1-5`) в поле ввода.

  2. 2

    Запросите объяснение

    Нажмите Explain Cron, и инструмент вернёт построчное описание каждого поля: минута, час, день месяца, месяц и день недели.

  3. 3

    Прочитайте описание

    Объяснение формируется на английском, например "Minute: every 5 minutes" или "Hour: from 9 through 17."

  4. 4

    Проверьте перед развёртыванием

    Используйте объяснение, чтобы убедиться, что расписание делает то, что нужно, прежде чем переносить его в crontab, конфигурацию CI или манифест Kubernetes.

Памятка по полям

 ┌───────────── минута (0-59)
 │ ┌─────────── час (0-23)
 │ │ ┌───────── день месяца (1-31)
 │ │ │ ┌─────── месяц (1-12 или JAN-DEC)
 │ │ │ │ ┌───── день недели (0-6 или SUN-SAT; воскресенье = 0 или 7)
 │ │ │ │ │
 * * * * *

Операторы в cron-выражениях

Оператор Значение Пример
* Любое значение * * * * *
, Список значений 0,15,30,45
- Диапазон 9-17
/ Шаг (начало/шаг) */5, 0-30/5
L Последний (последний день месяца или последний нужный день недели, Quartz) L, 5L
W Ближайший будний день 15W (Quartz)
# N-й нужный день недели в месяце 1#3 (Quartz)
? Без конкретного значения Только Quartz

Порядок чтения важен

0 */2 * * 1-5 читается слева направо так: минута 0, каждые 2 часа, любой день месяца, любой месяц, с понедельника по пятницу. По привычке люди иногда читают поля справа налево и путаются; всегда начинайте с минуты.

Ловушка «каждые X минут»

*/10 * * * * срабатывает в минуты 0, 10, 20, 30, 40, 50, а не «каждые 10 минут с момента создания задачи». Шаг в cron всегда отсчитывается от начала диапазона поля. Если вы развернёте задачу в 12:03, первый запуск будет в 12:10, а не в 12:13.

Для задач, которым действительно нужно «через N минут после последнего запуска», используйте планировщик с постоянным таймером (таймеры systemd с OnUnitActiveSec или планирование на уровне приложения с сохранённой меткой времени последнего запуска).

Ошибки cron, которые стоит знать

  • Заданы и день месяца, и день недели: большинство реализаций cron трактует это как поведение ИЛИ, скорее всего, это не то, что вам нужно.
  • Шаг 0: */0 недопустим.
  • Диапазон, переходящий через полночь: 22-2 для часов не работает в классическом cron; используйте 22-23,0-2.
  • 30 февраля: расписание вида 0 0 30 2 * не сработает никогда.
  • Неоднозначность перехода на летнее время (DST): задачи, запланированные между 2:00 и 3:00, в дни перехода могут сработать дважды или не сработать вовсе.

cron против современных планировщиков

cron в Unix по-прежнему есть везде, но для чего-то критичного вам, скорее всего, понадобится одно из следующего:

  • Таймеры systemd: подхватывают пропущенные запуски, поддерживают случайные смещения, читают настройки из unit-файлов.
  • Kubernetes CronJob: декларативный, с повторами, с поддержкой часовых поясов в версии 1.25 и выше.
  • Airflow / Prefect / Dagster: для задач с зависимостями, повторами, бэкфиллами и наблюдаемостью.
  • Расписание GitHub Actions: cron из 5 полей, только UTC, минимальный интервал 5 минут, доставка по принципу best-effort.

Сам по себе cron, отличный формат, но плохой планировщик для задач, которые нельзя пропустить.

Часто задаваемые вопросы

Потому что в стандартном cron день недели 0, это воскресенье (7 тоже воскресенье, так поддерживаются обе конвенции). Понедельник, это 1. Quartz нумерует дни недели от 1 до 7, где воскресенье = 1, и это часто сбивает с толку тех, кто переходит между разными реализациями.

Классический Unix-cron работает в локальном часовом поясе сервера, том, что указан в /etc/timezone. Kubernetes CronJob, GitHub Actions и большинство облачных планировщиков по умолчанию работают в UTC. Всегда проверяйте это и по возможности используйте UTC, чтобы избежать сюрпризов с летним временем.

Классический cron не может выразить это напрямую. Обходной путь: запускайте задачу каждый понедельник и проверяйте дату внутри скрипта: [ $(date +%d) -le 7 ] && ./job.sh. Quartz поддерживает это нативно через 1#1.

Нет. Каждому расписанию нужна своя строка. Но несколько расписаний можно объединить в одну строку списками: 0 9,17 * * * запускается в 9:00 и в 17:00. Для расписаний, которые нельзя выразить одной строкой, добавьте несколько строк, указывающих на одну и ту же команду.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Генератор цветовой палитры

Создавайте монохромные, аналоговые, комплементарные, триадные или тетрадные палитры из базового HEX-цвета и экспортируйте готовые CSS-переменные.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.