Расшифровка cron-выражений
Прочитайте расписание crontab простым языком и получите список ближайших запусков в любом часовом поясе.
Работает полностью в браузере
- Минута
- Час
- День месяца
- Месяц
- День недели
Ближайшие запуски
Стандартный cron из пяти полей (минута, час, день месяца, месяц, день недели), как в Vixie cron, cronie и большинстве систем Linux, а также сокращения вида @daily. Quartz и другие форматы с полем секунд распознаются, но не расшифровываются.
Как проверить cron-выражение
- Введите или вставьте пять полей расписания, например
*/15 9-17 * * 1-5, или выберите пример. Подойдёт и целая строка crontab; команда после пятого поля игнорируется. - Прочитайте описание простым языком и разбор каждого поля. Ошибка указывается в том поле, где она допущена.
- Посмотрите список ближайших запусков. Выберите часовой пояс, в котором работает сервер, и другое время начала, если хотите заглянуть вперёд.
Как читать расписание cron
Cron проверяет свою таблицу раз в минуту и запускает каждое задание, у которого все пять полей совпадают с текущим временем, с одним исключением для двух полей дней, описанным ниже. Так, */15 9-17 * * 1-5 означает: в минуты 0, 15, 30 и 45, в часы с 9 по 17, в любой день месяца, в любом месяце, с понедельника по пятницу. Последний запуск за день приходится на 17:45, потому что поле часа охватывает весь 17-й час.
Расшифровщик разбирает каждое поле так же, как Vixie cron и cronie, которые поставляются в большинстве дистрибутивов Linux. Названия месяцев и дней недели принимаются в любом регистре, а 7 считается воскресеньем. Шаг после одного числа, например 5/10, читается как 5-59/10, как это делают многие версии cron; некоторые старые его отвергают, поэтому инструмент напоминает записать диапазон полностью. Диапазоны должны идти от меньшего к большему: FRI-MON помечается как ошибка, а не «заворачивается», потому что стандартный cron диапазоны не заворачивает.
Время ближайших запусков вычисляется перебором по календарю в выбранном часовом поясе, поэтому выражение, которое может совпасть только 29 февраля, сразу находит ближайший високосный год, а то, которое не совпадёт никогда, например 0 0 31 2 *, помечается как никогда не выполняющееся.
Советы
- Переведите время запуска из журнала в Unix-время и обратно с помощью «Конвертера Unix-времени».
- Проверяете шаблон, по которому задание фильтрует свой журнал? Попробуйте «Проверку регулярных выражений».
- Посмотрите, как выглядит JSON-конфигурация с расписаниями, в инструменте «Форматирование и проверка JSON».
Вопросы и ответы
Что означают пять полей?
По порядку: минута (0–59), час (0–23), день месяца (1–31), месяц (1–12 или JAN–DEC) и день недели (0–7 или SUN–SAT, где и 0, и 7 означают воскресенье). Каждое поле принимает одно значение, список вроде 1,15, диапазон вроде 9-17, шаг вроде */15 или 0-30/10 либо * для каждого значения.
Почему задание выполняется в большее число дней, чем я ожидал?
Когда ограничены и поле дня месяца, и поле дня недели, cron запускает задание в дни, подходящие под любое из них, а не под оба сразу. 0 9 1 * 1 выполняется 1-го числа каждого месяца и в каждый понедельник. Так ведут себя Vixie cron и cronie. Особенность того же правила: поле, начинающееся с *, например */2, считается неограниченным, и тогда должны совпасть оба поля.
Какой часовой пояс использует cron?
Часовой пояс машины или контейнера, на котором он запущен, если только crontab не задаёт CRON_TZ или TZ. Многие серверы работают по UTC, поэтому проверьте это, прежде чем доверять видимому времени. Выберите в списке пояс сервера, чтобы увидеть время запусков.
Что происходит при переходе на летнее или зимнее время?
Список следует за часами в выбранном поясе: время, пропускаемое при переводе часов вперёд, исключается, а время, которое наступает дважды при переводе назад, указывается один раз. Vixie cron и cronie запускают задание, назначенное на пропущенный час, вскоре после перехода и не повторяют задания в повторяющийся час; у других планировщиков поведение разное. Если в показанном периоде есть переход, появляется примечание.
Поддерживаются ли секунды или синтаксис Quartz?
Нет. Выражения из шести или семи полей либо с ?, L, W или # относятся к Quartz, Spring и подобным планировщикам, где первое поле — секунды. Инструмент сообщает об этом, а не гадает, потому что чтение таких выражений как стандартного cron дало бы неверное расписание.
Что означают @daily, @hourly и другие сокращения?
@hourly — это 0 * * * *, @daily и @midnight — 0 0 * * *, @weekly — 0 0 * * 0, @monthly — 0 0 1 * *, а @yearly и @annually — 0 0 1 1 *. @reboot выполняется один раз при запуске службы cron, поэтому у него нет времён для списка.