Cron-выражения: объяснение и ближайшие запуски
Расшифровка cron (crontab, Spring, Quartz) по-русски, ближайшие запуски в часовом поясе, ошибки и предупреждения.
Данные обрабатываются в браузере и никуда не отправляются
Ввод
Результат
Здесь появится результат
Введите данные слева - результат появится сразу
Как пользоваться
Введите cron-выражение - расшифровка появляется сразу: понятное описание по-русски, разбор каждого поля и список ближайших запусков в выбранном часовом поясе с учётом перехода на летнее время. Поддерживаются crontab (5 полей), Spring (6 полей с секундами) и Quartz (6-7 полей со спецсимволами ?, L, W, #), а также макросы @daily, @hourly, @weekly, @monthly, @yearly. Диалект определяется автоматически, при необходимости выберите его вручную.
Ошибки показываются по-русски и называют поле: «Минуты: значение 61 вне допустимого диапазона 0-59». Если выражение допустимо, но ведёт себя неочевидно (например, и день месяца, и день недели заданы одновременно), появится предупреждение.
Частые ошибки
Вот на чём чаще всего ошибаются в cron:
День месяца и день недели - это «ИЛИ»
В crontab выражение 0 0 13 * 5 запускается не по пятницам 13-го, а в каждое 13-е число И в каждую пятницу. Это самая известная ловушка cron. Если нужно «по пятницам 13-го», проверяйте день в самой задаче. В Quartz такое выражение просто запрещено: в одном из полей нужен «?».
Пять полей или шесть
В crontab пять полей (минуты ... день недели), в Spring и Quartz - шесть (секунды в начале), у Quartz есть ещё необязательный год. Пятое выражение, вставленное в Spring, сдвигает все поля на одно и либо ломается, либо работает совсем не так.
Нумерация дней недели
В crontab и Spring воскресенье - 0 (и 7), понедельник - 1. В Quartz воскресенье - 1, суббота - 7. Одно и то же число даёт разные дни. Надёжнее писать названия: MON-FRI.
Часовой пояс сервера
Cron запускает задачи по времени того пояса, в котором работает планировщик, чаще всего UTC на серверах и контейнерах. «Запуск в 9:00» в UTC - это 12:00 в Москве. Укажите пояс запуска, и инструмент покажет реальное время.
Переход на летнее время
Там, где часы переводят, задача на 02:30 может не выполниться весной (такого времени нет) или выполниться дважды осенью. Для критичных задач ставьте запуск вне периода перевода или работайте в UTC.
*/n не всегда «каждые n»
*/7 в минутах даёт 0, 7, 14 ... 56 и затем снова 0: между 56 и 0 пройдёт 4 минуты, а не 7. Шаг считается внутри диапазона поля, а не «от прошлого запуска». Для интервалов, не делящих 60, нужен другой механизм.
Несуществующие даты
0 0 31 2 * или 0 0 30 2 * никогда не сработают: в феврале нет 30-го и 31-го числа. А 0 0 29 2 * выполнится только в високосные годы. Инструмент покажет, что ближайших запусков нет.
Частые вопросы
Отправляются ли мои выражения на сервер?
Нет - 100%. Сайт целиком статический, у него нет серверной части. Разбор и расчёт запусков выполняются в вашем браузере.
Из каких полей состоит cron-выражение?
Для crontab: минуты (0-59), часы (0-23), день месяца (1-31), месяц (1-12 или JAN-DEC), день недели (0-7 или SUN-SAT). В Spring и Quartz слева добавляется поле секунд, а в Quartz справа - необязательный год. Значения можно задавать числом, списком (1,15), диапазоном (1-5), шагом (*/10, 10-40/5).
Что значит */5, 1-5 и 1,15?
*/5 - каждое пятое значение с начала диапазона (каждые 5 минут); 1-5 - диапазон от 1 до 5 включительно; 1,15 - список из значений 1 и 15. Их можно сочетать: 0-30/10,45 - минуты 0, 10, 20, 30 и 45.
Чем отличаются crontab, Spring и Quartz?
crontab - классический планировщик Unix (5 полей). Spring @Scheduled использует 6 полей с секундами и допускает «?» для не заданного поля. Quartz - самый богатый: 6-7 полей, год, спецсимволы L (последний), W (ближайший будний), # (n-й день недели месяца), но дни недели нумеруются по-своему.
Что значат L, W и # в Quartz?
L в дне месяца - последний день месяца (L-3 - за три дня до конца); LW - последний будний день; 15W - ближайший будний день к 15-му числу; в дне недели 6L - последняя пятница месяца, 6#3 - третья пятница месяца.
Что такое @daily, @hourly и другие макросы?
Это короткие записи частых расписаний: @hourly = 0 * * * *, @daily и @midnight = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly и @annually = 0 0 1 1 *. @reboot выполняется при старте системы и расписания не имеет.
Почему задача сработала не в то время?
Чаще всего причина в часовом поясе сервера (UTC вместо местного), в нумерации дней недели другого диалекта или в правиле «день месяца ИЛИ день недели». Проверьте выражение здесь с нужным часовым поясом - увидите реальные моменты запуска.
Как запустить задачу каждые 45 минут или раз в полтора часа?
Обычный cron так не умеет: */45 даст запуски в 0 и 45 минут каждого часа. Для нерегулярных интервалов используйте планировщик с интервалом (systemd timer, fixedRate в Spring) либо список конкретных времён.
Чему равны ближайшие запуски, если задан год?
В Quartz седьмое поле ограничивает расписание годами. Если все указанные годы уже прошли, ближайших запусков нет - инструмент сообщит об этом.
Похожие инструменты
Курс «Проектирование API и интеграций»
Глубокое погружение в REST, gRPC, SOAP, проектирование баз данных и брокеры сообщений (Kafka, RabbitMQ). Делегирование рутины нейросетям (ИИ). Перестанете бояться технических собеседований и начнете говорить с разработчиками на одном языке. Курс собран так, чтобы пробить зарплатный потолок и вырасти в грейде - ученики тому подтверждение.
Перейти к курсу на Stepik