Язык: Русский Перейти на английский

Расшифровщик cron-выражений

Вставьте cron-выражение и получите объяснение простым английским. Поддерживает standard 5-полевые и 6-полевые (с секундами) cron-форматы.

Примеры (нажмите, чтобы попробовать)

  1. Введите или вставьте cron-выражение в поле ввода выше.
  2. Прочитайте объяснение простым английским, которое появляется ниже.
  3. Нажмите на любую фишку примера, чтобы поместить её во ввод и увидеть расшифровку.
  4. Исправьте любую ошибку парсинга, показанную красным, и повторяйте, пока объяснение не совпадёт с вашим намерением.
Что это делает?

Расшифровщик берёт standard Unix cron-выражение (5 полей) или Quartz-стильное выражение с секундами (6 полей) и возвращает описание на человеческом языке, например "At 09:00 AM, Monday through Friday". Поддерживает общие операторы — *, ",", - и / — а также именованные месяцы (JAN-DEC) и именованные дни недели (SUN-SAT). Результат обновляется при каждом нажатии клавиши, чтобы можно было быстро итерировать выражение.

Пример

Типичная задача рабочих часов:

0 9 * * MON-FRI

Расшифровано:

At 09:00 AM, Monday through Friday

Более специфичное 6-полевое Quartz-выражение с секундами:

0 30 2 ? * MON

Расшифровано (каждый понедельник в 02:30:00).

Формат cron

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

Почему cron "0 0 * * *" срабатывает в полночь UTC, а не в моё местное время?

Большинство реальных cron-багов попадают в небольшой набор повторяющихся ловушек:

  • Смещение часового пояса. 0 0 * * * срабатывает в полночь в часовом поясе планировщика. На Kubernetes CronJobs и GitHub Actions это по умолчанию UTC — задайте spec.timeZone или сами переведите час в UTC.
  • Несоответствие 5-полей и 6-полей. Вставка 0 0 9 * * MON-FRI (6 полей) в 5-полевой планировщик читает начальный 0 как минуту и 0 как час, так что задача срабатывает в полночь, а не в 09:00.
  • День месяца и день недели вместе. 0 0 15 * MON запускается 15-го и каждый понедельник — не только в понедельник, выпадающий на 15-е. Это ИЛИ-семантика Vixie-cron.
  • Step не перезапускается при деплое. */10 * * * * срабатывает в :00, :10, :20, :30, :40, :50 по часам — не через десять минут после последнего деплоя.
  • Использование ? в standard cron. Заполнитель ? — это расширение Quartz. Unix cron его отвергает — используйте * вместо.
  • День недели 0 vs 7. Оба означают воскресенье в классическом cron, но некоторые парсеры (старый BSD) принимают только 0. Если важна переносимость, используйте SUN.

Операторы

  • * — любое значение
  • , — список значений (напр. MON,WED,FRI)
  • - — диапазон (напр. 1-5)
  • / — шаговые значения (напр. */15 = каждые 15)
Часто задаваемые вопросы

В чём разница между 5-полевым и 6-полевым cron?

Standard POSIX cron имеет 5 полей: минута, час, день месяца, месяц, день недели. 6-полевой вариант добавляет впереди поле секунд и используется Quartz, Spring @Scheduled и многими Node cron-библиотеками. 6-полевое выражение "0 0 9 * * MON-FRI" срабатывает в 9:00:00 по будням, тогда как 5-полевое "0 9 * * MON-FRI" — в 9:00.

Поддерживает ли это Quartz-расширения, такие как L, W и #?

Этот расшифровщик поддерживает общий диалект Unix / Vixie cron плюс необязательное начальное поле секунд. Только-Quartz токены (L для последнего, W для будня, # для n-го будня и заполнитель ?) не являются частью standard cron и не гарантированно парсятся. Если вы на них полагаетесь, используйте документацию конкретного планировщика для проверки выражения.

Почему 0 0 * * * срабатывает в другое время, чем я ожидаю?

У cron-выражений нет часового пояса. Задача запускается в полночь в часовом поясе машины или контейнера, владеющего планировщиком. На Kubernetes CronJobs, GitHub Actions и AWS EventBridge это по умолчанию UTC. Если нужна местная полночь, задайте часовой пояс планировщика явно (spec.timeZone на CronJob, переменная окружения TZ, ключ timezone в cron.yaml).

Могу ли я объединить день месяца и день недели?

В standard Vixie cron, если ограничены и день месяца, и день недели, задача срабатывает, когда совпадает любое — это ИЛИ, а не И. Так "0 0 15 * MON" запускается 15-го каждого месяца и каждый понедельник. Quartz инвертирует это и требует, чтобы одно поле было "?" для разрешения неоднозначности.

Как работают шаговые значения?

Шаг использует синтаксис диапазон/шаг. "*/15 * * * *" срабатывает каждые 15 минут, начиная с :00. "10-50/20" в поле минут срабатывает в :10, :30, :50. Шаг не означает "каждые N от сейчас" — границы всегда выравниваются по началу диапазона, поэтому не ожидайте, что шаг будет дрейфовать с текущим временем.

Сохраняете ли вы cron-выражения, которые я здесь тестирую?

Нет. Мы не храним записи выражений, которые вы печатаете. Всё, что вы вставляете или экспериментируете, отбрасывается, когда вы закрываете или обновляете страницу — никаких логов, никакой аналитики по расписаниям, над которыми вы работаете. Можете проверить developer tools вашего браузера для дополнительной уверенности.