Парсер cron-выражений
Пять полей через пробел или сокращение, например @daily.
Вам достаётся чужой crontab, набитый строками вроде 0 */2 * * 1-5 и 30 3 * JAN,JUL 1. Парсер раскладывает каждое поле на точный набор значений, которые оно охватывает: вместо того чтобы гадать, что скрывается за */2, вы видите все двенадцать часов и их количество рядом. Кроме того, вы получаете нормализованную форму из 5 полей, предупреждение, если выражение попало в известную ловушку, и 5 ближайших запусков, рассчитанных в вашем часовом поясе.
Как разобрать cron-выражение
-
1
Вставьте выражение
Строка из 5 полей (`* * * * *`): минута, час, день месяца, месяц и день недели. Сокращения вроде `@daily` тоже работают.
-
2
Прочитайте разложенные поля
Для каждого поля перечислены значения, которые оно охватывает, и их количество, поэтому `*/2` в поле часа показывает 0, 2, 4 и остальные девять значений, которые в него попадают.
-
3
Проверьте предпросмотр ближайших запусков
Ближайшие 5 срабатываний, рассчитанные прямо в браузере по часовому поясу вашего устройства. Если они расходятся с замыслом, уточните выражение.
-
4
Прочитайте предупреждения
Парсер отмечает ловушки: заданы оба поля дня, указана дата, которой не бывает, или использован оператор, которого стандартный cron не понимает.
Во что разворачивается каждое поле
Поле задаёт не одно значение, а целый набор. Обычно достаточно понять, насколько этот набор велик, и вопрос, с которым вы пришли, отпадает сам собой.
| Поле | Диапазон | * охватывает |
Примечания |
|---|---|---|---|
| Минута | 0-59 | 60 значений | Главный источник бесконтрольно запускающихся задач |
| Час | 0-23 | 24 значения | 24-часовой формат, а не 1-12 |
| День месяца | 1-31 | 31 значение | В коротких месяцах недостающие дни просто пропускаются |
| Месяц | 1-12 | 12 значений | Принимаются и названия от JAN до DEC |
| День недели | 0-7 | 7 значений | И 0, и 7 означают воскресенье |
Операторы внутри поля: * все значения, 1,5,10 список, 1-5 диапазон, */15 шаг, отсчитываемый от начала диапазона, и 0-45/15 шаг внутри диапазона.
Названия и сокращения тоже принимаются
Названия месяцев и дней недели разбираются и разворачиваются в числа, которым соответствуют: для 30 3 * JAN,JUL 1 в поле месяца будет 1, 7, а в поле дня недели 1. Именованные сокращения разворачиваются в форму из 5 полей раньше всего остального:
| Сокращение | Разворачивается в | Что означает |
|---|---|---|
@yearly, @annually |
0 0 1 1 * |
Полночь 1 января |
@monthly |
0 0 1 * * |
Полночь 1-го числа |
@weekly |
0 0 * * 0 |
Полночь в воскресенье |
@daily, @midnight |
0 0 * * * |
Полночь каждый день |
@hourly |
0 * * * * |
Начало каждого часа |
@reboot тоже распознаётся, но разворачивать здесь нечего: задача выполняется один раз при запуске машины, поэтому и ближайших запусков у неё не будет.
Предупреждения, которые стоит прочитать
- Ограничены оба поля дня.
0 0 1 * MONне значит «1-го числа, но только если это понедельник». Когда ограничены оба поля дня, стандартный cron объединяет их по ИЛИ, поэтому такая строка сработает и 1-го числа каждого месяца, и каждый понедельник. Парсер выводит это предупреждение, а предпросмотр запусков следует тому же правилу ИЛИ. - Дата, которой не бывает.
0 0 30 2 *просит 30 февраля. Синтаксически выражение корректно, и cron его примет, но сработать оно не сможет никогда. Парсер прямо об этом сообщает, вместо того чтобы показать пустой список без объяснений. - Операторы Quartz.
L(последний),W(ближайший рабочий день),#(день недели по номеру в месяце) и?относятся к расширениям Quartz, а не к стандартному crontab. Внутри строки из 5 полей они распознаются и помечаются, а в поле вместо списка значений указано, что это оператор Quartz. Время запусков не рассчитывается, потому что стандартный cron такую строку не выполнил бы вовсе.
Что отклоняется сразу
- Неверное число полей. Строка Quartz из 6 полей с секундами или из 7 полей с годом отклоняется по количеству полей.
- Значения вне диапазона, например минута 75 или месяц 13.
- Убывающий диапазон вроде
5-1. - Нулевой шаг, например
*/0.
В каждом отказе названы поле и значение, которые его вызвали, поэтому вы правите одну деталь, а не переписываете строку целиком.
Часовой пояс
Ближайшие запуски рассчитываются в браузере, в том часовом поясе, который выставлен на вашем устройстве. Сам crontab работает по времени той машины, где он установлен, поэтому, если сервер живёт по UTC, а вы нет, перед сравнением сдвиньте время на нужную разницу.
Часто задаваемые вопросы
Как расписание они не разбираются. Строка Quartz из 6 полей с секундами или из 7 полей с годом отклоняется по количеству полей. Операторы Quartz внутри обычной строки из 5 полей (L, W, #, ?) работают иначе: они распознаются и помечаются, но время запусков не рассчитывается, потому что стандартный cron такую строку тоже не выполнил бы.
Обычно причины две: разница часовых поясов между вашим устройством и сервером, где стоит crontab, либо заданные сразу оба поля дня. Когда ограничены и день месяца, и день недели, cron срабатывает при совпадении любого из них, а не обоих сразу, поэтому 0 0 1 * MON запускается гораздо чаще, чем многие ожидают. Количество значений рядом с каждым полем быстрее всего подскажет, какое поле оказалось шире, чем вы думали.
Да. Kubernetes использует стандартный синтаксис из 5 полей. Учитывать нужно только часы: CronJob работает в часовом поясе кластера (по умолчанию UTC, если в spec.timeZone не указано иное), а предпросмотр здесь берёт часовой пояс вашего устройства.
Это именованные сокращения, которые cron в Linux принимает вместо пяти полей. @daily (он же @midnight) равен 0 0 * * *, @weekly равен 0 0 * * 0, @monthly равен 0 0 1 * *, @yearly (он же @annually) равен 0 0 1 1 *, а @hourly равен 0 * * * *. Вставьте любое из них, и парсер покажет, в какую форму из 5 полей оно разворачивается. Исключение составляет @reboot: задача выполняется при запуске системы, поэтому расписания и ближайших запусков у неё нет.
Сопутствующие инструменты
Справочная таблица ASCII
Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.
Справочник символов HTML
Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.
Смешивание цветов
Смешайте два HEX-цвета в 2-20 равномерных образцов. Каждый промежуточный цвет показывается как HEX-код в верхнем регистре, включая оба края.
Счетчик FPS
Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.
Генератор случайных букв
Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.
Справочник сочетаний клавиш
Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.
Инструмент доступен на других языках
- Parser wyrażeń cron [PL]
- เครื่องมือแยกวิเคราะห์นิพจน์ Cron [TH]
- Analizador de expresiones cron [ES]
- Cron 式パーサー [JA]
- محلل تعبيرات cron [AR]
- Cron 표현식 파서 [KO]
- Bộ phân tích biểu thức Cron [VI]
- Analyseur d'expressions cron [FR]
- Cron-Ausdruck-Parser [DE]
- Pengurai Ekspresi Cron [ID]
- Analisador de Expressões Cron [PT]
- Parser för cron-uttryck [SV]
- Cron-expressieparser [NL]
- Cron Expression Parser [EN]
- Parser di espressioni cron [IT]
- Cron İfadesi Ayrıştırıcı [TR]
- Cron 表达式解析器 [ZH]