Выражение cron

Разобрать cron Linux, Spring или Quartz, либо собрать его по полям, и показать 10 ближайших запусков по местному времени этого компьютера. Собрать crontab

Собрать crontab

Поля

Когда срабатывает это расписание

Выберите Linux Crontab (5 полей), Spring @Scheduled (6 полей, секунды впереди) или Quartz (6 полей, либо 7 с годом). Страница поясняет каждое поле и показывает 10 ближайших запусков по часам этого компьютера. Задание она не ставит. Собрать его по времени или из @daily можно в генераторе crontab. Метки времени — метка времени Unix.

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

  1. Формат — Linux Crontab (5), Spring @Scheduled (6) или Quartz (6–7). Строка под меню называет порядок полей и какое число означает воскресенье.
  2. Введите выражение, откройте Шаблон или правьте каждую строку в Полях. Шаблон содержит Каждую минуту, Каждый час, Каждый день в полночь, Каждое воскресенье в полночь, По будням с 9 до 17, каждые 15 минут и Первый день месяца в полночь. Кнопки под полем подставляют этот список для текущего формата, а ещё Каждый день в 02:00, Выходные в 09:00, Минуты 5/15, Каждые 2 часа в минуту 30 и 1 января. У Spring и Quartz есть ещё Последний день месяца в 23:00, будний день, ближайший к 15-му, первый понедельник в 10:15 и последняя пятница в 10:15. У Quartz есть и 1 января 2030. Ссылка рядом с кнопками открывает генератор crontab. В каждой строке: Каждое, Диапазон, Шаг и Указать. Указать показывает значения: секунды и минуты 0–59, часы 0–23, дни 1–31, месяцы 1–12, дни SUN–SAT. У Spring и Quartz ещё есть Не задано (?), Последний день (L), Последний будний день (LW), Ближайший будний день (W), N-й день недели (#) и Последний день недели (nL). Правка в Полях переписывает выражение. Поле, которое строки не умеют показать, остаётся на Свой текст и сохраняет символы.
  3. Считать по мере ввода включено. Разобрать выполняется один раз. Показать пример подставляет будний пример текущего формата: Linux */15 9-17 * * 1-5, Spring 0 */15 9-17 * * MON-FRI, Quartz 0 */15 9-17 ? * MON-FRI.
  4. Результат называет каждое поле, затем 10 ближайших запусков. Очистить всё очищает выражение и результат и возвращает каждое поле на Каждое. Копировать результат копирует этот текст. Смена формата добавляет или убирает секунды, на Linux меняет ? на * и переписывает номера дней недели как SUN–SAT, чтобы остались те же дни.

Какие даты подходят

Linux — это минута, час, день месяца, месяц, день недели. Воскресенье — 0, 7 или SUN. Понедельник — 1. Нет ?, L, W и #. Если ограничены и день месяца, и день недели, достаточно одного совпадения, и результат об этом пишет.

Spring добавляет секунды впереди. Воскресенье нумеруется как в Linux. ? значит, поле не читается. L — последний день месяца. 15W — ближайший будний день к 15-му, без выхода из месяца. LW — последний будний день. MON#1 — первый понедельник. 6L — последняя суббота, потому что здесь 6 — это суббота.

Quartz использует те же шесть полей и необязательный год, например 2024-2030. Воскресенье — 1 или SUN. Понедельник — 2. Суббота — 7. 6L — последняя пятница. День или день недели должен быть ?, как в 0 0 2 * * ? для 02:00 каждый день. Если заданы оба, результат всё равно показывает запуск, когда совпало любое поле, и предупреждает. SUN–SAT и JAN–DEC не зависят от регистра и значат один и тот же день или месяц во всех трёх форматах.

Дефис — диапазон, запятая — список, косая черта — шаг. */15 идёт от начала поля с шагом 15. 5/15 начинается с 5 и идёт до конца, минуты 5, 20, 35 и 50. Время местное, не UTC. Если есть поле секунд, список шагает по секундам, иначе по минутам.

Где это нужно

  • Проверить строку crontab вроде 0 2 * * * до установки.
  • Записать Spring 0 0 2 * * * для 02:00 каждый день.
  • Проверить Quartz 0 15 10 ? * 6L (последняя пятница в 10:15) или 0 0 23 L * ? (23:00 в последний день месяца).

Вопросы

Почему 02:00 — пять полей в Linux и шесть в Spring?

В Linux нет секунд, поэтому 02:00 — это 0 2 * * *. Spring и Quartz ставят секунды впереди: то же время — 0 0 2 * * *, а в Quartz часто 0 0 2 * * ?.

Что означает вопросительный знак?

Это поле не задано. Quartz хочет его в дне месяца или в дне недели. 0 0 2 * * ? — это 02:00 каждый день.

1 — это воскресенье?

В Linux и Spring 1 — понедельник, воскресенье — 0 или 7. В Quartz 1 — воскресенье, 2 — понедельник. SUN — воскресенье во всех трёх.

Часы не совпадают с UTC.

10 ближайших запусков берёт местный часовой пояс этого компьютера.