Расшифровщик cron-выражений
Вставьте cron-выражение и получите объяснение простым английским. Поддерживает standard 5-полевые и 6-полевые (с секундами) cron-форматы.
Примеры (нажмите, чтобы попробовать)
0 0 * * *— ежедневно в полночь*/5 * * * *— каждые 5 минут0 9 * * MON-FRI— утром в будни в 9:000 0 1 * *— первого числа каждого месяца в полночь0 0 * * 0— каждое воскресенье в полночь15 2 * * *— ежедневно в 2:150 */6 * * *— каждые 6 часов30 3 1-7 * 1— в первый понедельник месяца в 3:30
- Введите или вставьте cron-выражение в поле ввода выше.
- Прочитайте объяснение простым английским, которое появляется ниже.
- Нажмите на любую фишку примера, чтобы поместить её во ввод и увидеть расшифровку.
- Исправьте любую ошибку парсинга, показанную красным, и повторяйте, пока объяснение не совпадёт с вашим намерением.
Что это делает?
Расшифровщик берёт 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 вашего браузера для дополнительной уверенности.