Генератор выражений Cron и калькулятор следующего запуска — управляйте Cron без угадывания

Опубликовано

Синтаксис крона вызывает затруднения даже у опытных разработчиков. Визуальный генератор выражений крона и калькулятор следующего запуска устраняют неопределённость — создавайте выражения без запоминания порядка полей, а затем проверяйте, что они запускаются ровно в тот момент, когда вы ожидаете.

Генератор cron-выражения и калькулятор следующего запуска — Освоение cron без угадывания 1
Реклама · УДАЛИТЬ?

Синтаксис cron — одна из тех вещей, которые разработчики ищут каждый раз. Не потому что он сложен — а потому что пятиполе формат слишком неясен, чтобы вызывать сомнения. Идет ли поле часов перед или после минут? Означает ли это каждые 5 минут или с начала минуты 5? */5 означает каждые 5 минут или с начала минуты 5?

Тег «cron expression» на Stack Overflow содержит более 14 000 вопросов. До того, как учесть несоответствия платформы, которые усугубляют путаницу: Linux cron использует пять полей, Kubernetes использует пять полей с немного иными смыслами, AWS EventBridge добавляет шестое, а планировщики Quartz вводят поле секунд в начало.

Две программы устраняют шум: визуальный генератор cron-выражения, который строит выражения из понятных для человека вводов, и калькулятор следующего запуска, который показывает вам точно, когда ваша задача запустится — без необходимости угадывать.

Повторение синтаксиса cron

Стандартный пятиполе формат cron читается слева направо: минуты, часы, день месяца, месяц, день недели.

* * * * *
│ │ │ │ └── Day of week (0–7, where 0 and 7 = Sunday)
│ │ │ └──── Month (1–12)
│ │ └────── Day of month (1–31)
│ └──────── Hour (0–23)
└────────── Minute (0–59)

Несколько распространённых примеров:

  • 0 2 * * * — каждый день в 2:00 ночи
  • 0 9 * * 1 — каждый понедельник в 9:00 утра
  • */15 * * * * Нет конкретного значения (только Quartz/AWS)
  • 0 0 1 * * — полночь в первый день каждого месяца

Просто в изоляции. На практике неясность усиливается: является ли это понедельник или воскресенье? Поддерживает ли эта платформа значения шага? Именно здесь генератор и получает свою ценность. 1 Почему платформа поддерживает значения шага и диапазоны — это то, где визуальный генератор действительно выделяется.

Инструмент 1: Генератор cron-выражения

The Генератор выражений Cron превращает абстрактный синтаксис в интерфейс с возможностью нажатия мышью. Установите значения для каждого компонента — минуты, часы, день, месяц, день недели — и инструмент выдаёт выражение. Не нужно запоминать порядок полей, не нужно сомневаться в специальных символах.

Два реальных примера:

Ежедневная резервная копия базы данных в 2 часа ночи

Установите минуты на 0, часы на 2, оставьте день месяца, месяц и день недели как *. Результат: 0 2 * * *. Это запускается ровно в 02:00 каждый день.

Еженедельный отчёт каждый понедельник в 9 утра

Установите минуты на 0, часы на 9, день месяца на *, месяц на *, день недели на 1 (понедельник). Результат: 0 9 * * 1.

Где генератор действительно блестит — это при значениях шага и диапазонах — */5 (каждые 5 минут), 1-5 (понедельник по пятницу), 0,12 (полночь и полдень). Эти комбинации — то, где умственная нагрузка от чистого синтаксиса cron становится недостатком, и визуальный построитель делает логику явной до того, как она достигнет производства.

Инструмент 2: Калькулятор следующего запуска cron

Правильное выражение — это первый шаг. Подтверждение того, что оно запускается в нужное время — второй шаг — и его легко пропустить.

The для проверки того, что запускается вовремя. принимает любое cron-выражение и показывает следующие 10 запланированных моментов запуска, рассчитанные с текущего момента. Вставьте своё выражение и получите результат сразу.

Практическое применение: вы написали 0 9 * * 1-5 думая, что оно работает с понедельника по пятницу в 9 утра. Вставьте это в калькулятор и следующие 10 моментов запуска сразу появятся — это делает очевидным, правильно ли вы указали диапазон. Если вы случайно написали 0 9 * * 0-5 (воскресенье по пятницу вместо), следующий запуск показывает запуск в воскресенье, и вы обнаруживаете ошибку до развертывания.

Это быстрее, чем развертывание задачи, ожидание и проверка журналов — особенно для задач, запланированных раз в неделю или раз в месяц, где неправильное выражение может оставаться незамеченным на протяжении недель.

Различия платформ: Linux, Kubernetes, GitHub Actions и AWS

Здесь cron становится действительно сложным. То же выражение может означать разные вещи — или быть недопустимым — в зависимости от того, какой планировщик его выполняет.

Linux cron (5 полей)

Оригинал. Пять полей: minute hour day month weekday. Настроено через crontab -e. Нет поддержки секунд. День недели: 0 и 7 оба означают воскресенье.

Kubernetes CronJobs (5 полей)

Kubernetes использует тот же пятиполе формат для своего schedule: поля — функционально эквивалентно Linux cron. Значения шага и диапазоны работают одинаково. Он не добавляет поле секунд, несмотря на то, что вы можете прочитать. нет AWS EventBridge / CloudWatch Events (6 полей)

EventBridge использует другой шестиполе формат:

. Поле года является обязательным и не может быть опущено. Также используется minute hour day month weekday yearкогда поле не применимо — вы должны использовать ? вместо * для либо дня месяца, либо дня недели, поскольку указание обоих является неоднозначным. ? GitHub Actions (5 полей, только UTC)

GitHub Actions принимает стандартный пятиполе синтаксис cron в поле

. Все временные значения — в UTC. Минимальный интервал планирования — 5 минут, и запланированные задачи могут запускаться позже, чем запланировано, в периоды высокой нагрузки на инфраструктуру GitHub. schedule: Quartz / Spring Scheduler (6–7 полей)

Java-ориентированные планировщики, такие как Quartz и Spring Scheduling, добавляют поле

в начало: секунды . Это означает, что second minute hour day month weekday [year]запускается каждые 5 секунд — а не каждые 5 минут. Просто легко запутаться, если вы переключаетесь между Java и Linux cron. 0/5 * * * * ? срабатывает каждые 5 секунд — а не каждые 5 минут. Легко запутаться, если вы переключаетесь между Java и cron на Linux.

Общие паттерны cron

Случаи использованияКаждый день в 9:00 утраКогда запускается
Каждые 15 минут*/15 * * * *:00, :15, :30, :45 каждый час
Ежедневно в полночь0 0 * * *Каждый день, 00:00
Ежедневная резервная копия в 2 часа ночи0 2 * * *Каждый день, 02:00
Понедельник–пятница в 9 утра0 9 * * 1-5Пн–Пт, 09:00
Еженедельная очистка (воскресенье в полночь)0 0 * * 0Воскресенья, 00:00
Первый день месяца в полдень0 12 1 * *1-е каждого месяца, 12:00
Каждый час0 * * * *Каждый час в начале
Два раза в день0 8,20 * * *08:00 и 20:00 ежедневно
Хотите убрать рекламу? Откажитесь от рекламы сегодня

Установите наши расширения

Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска

в Расширение Chrome в Расширение края в Расширение Firefox в Расширение Opera

Табло результатов прибыло!

Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!

Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?

новости с техническими моментами

Примите участие

Помогите нам продолжать предоставлять ценные бесплатные инструменты

Купи мне кофе
Реклама · УДАЛИТЬ?