Инструменты разработчика · Генератор Crontab
Синтаксис шагов и диапазонов Cron: */15, 1-5, списки и способы их объединения
· Как это работает
хрон планирование рабочий процесс разработчика
Шаги, диапазоны и списки — это часть синтаксиса cron, которую люди копируют, не понимая. В этом посте объясняется каждый из них, как они гнездятся, а также сюрпризы типа */7, что не означает «каждые семь дней».
Каждые 15 минут, но только с 9 по 5 — наивное выражение срабатывает и ночью
«Каждые пятнадцать минут в рабочее время» содержит два независимых ограничения. Для поля минут требуются отметки четверти часа, а для поля часов — ограниченный интервал. Написание только `*/15 * * * *` решает первую половину и по-прежнему производит пробежки всю ночь. Выражение должно закодировать оба ограничения, прежде чем оно скажет что-либо о будних днях.
ToolAcre анализирует пять полей расписания, а не команду. Начните с `*/15 9-17 * * 1-5`, затем просмотрите предложение и предварительный просмотр следующего запуска. Эта проверка выявляет распространенную ошибку, когда `9-17` ставится в положение минут или оставляет поле дня недели неограниченным. Генератор создает и объясняет выражение; он не устанавливает и не выполняет задание.
Диапазоны — 1-5 и 9-17 как включающие диапазоны в одном поле.
Дефис создает включающий диапазон внутри одного поля. `9-17` в позиции часа расширяется до девяти значений: от 9 до 17. Аналогично, `1-5` в позиции дня недели расширяется до понедельника по пятницу, поскольку этот синтаксический анализатор сопоставляет воскресенье с 0, понедельник с 1 и так далее. Участвуют обе конечные точки, поэтому 17:00 находится в пределах выбранного диапазона часов.
Диапазоны не могут пересекать границу поля. Анализатор отклоняет обратную форму, например `17-9`, и предлагает разделить нужные значения на два элемента списка. Этот отказ полезен, поскольку правила упаковки различаются для разных продуктов планирования. Здесь диапазон всегда перемещается вверх между значениями, которые уже удовлетворяют ограничениям числовых значений или допустимых имен поля.
Шаги — */15 и 9-17/2, и почему шаг перезапускается на нижней границе поля, а не ведется непрерывный подсчет
Косая черта выбирает каждое n-е значение от начальной точки. `*/15` в поле минут начинается с минимального нуля и расширяется до 0, 15, 30 и 45. `9-17/2` начинается с 9 и дает 9, 11, 13, 15 и 17. Шаг принадлежит одному полю; он не считает прошедшие минуты через границы часов.
Анализатор также принимает простое начало с шагом. `5/15` в поле минут означает 5, 20, 35 и 50, поскольку неявной верхней конечной точкой является 59. Шаги должны быть положительными целыми числами и не могут превышать размер полного диапазона поля. Нулевой, нечисловой или слишком большой шаг получает ошибку проверки для конкретного поля вместо предполагаемой интерпретации.
Списки могут объединять значения, диапазоны и ступенчатые диапазоны в одном поле.
Запятые объединяют несколько частей в одном поле. Простой `1,15,30` называет три минутных значения. Более сложные входные данные могут сочетать в себе одиночное значение, включающий диапазон и ступенчатый диапазон: тестируемый `0,10-20/5,59` расширяется до 0, 10, 15, 20 и 59. Повторяющиеся результаты удаляются, а расширенные значения сортируются до того, как они будут использованы в последующих вычислениях.
Эта грамматика композиционна, но все же узка. Каждый элемент с запятой может содержать одну косую черту, а диапазон должен иметь ровно две непустые конечные точки. Случайная запятая, несколько косых черт или незавершенный диапазон отклоняются с указанием причины, указывающей на название поля. Это позволяет просматривать смешанные выражения, не притворяясь, что неправильно сформированная пунктуация имеет обычное значение.
Рабочий пример: */15 9-17 * * 1-5 — перечисление производимых минут и крайний случай 17:45
Для `*/15 9-17 * * 1-5` минутные значения: 00, 15, 30 и 45; часы: с 09 по 17; значения дней недели — с понедельника по пятницу. В каждый включенный день недели первым кандидатом является 09:00, а последним — 17:45. 18:00 отсутствует, поскольку 18 находится за пределами часового диапазона.
Крайний край последнего прохода иллюстрирует, почему расширение поля лучше разговорной стенографии. «С девяти до пяти» может означать остановку на 17:00 для одного читателя и включение полного пятичасового часа для другого. Поле часов Cron выбирает часовой сегмент, затем поле минут выбирает позиции внутри него. Если 17:45 нежелателен, для желаемой границы требуется другое выражение или логика на стороне команды.
Шаг дня месяца увеличивается со дня 1 каждый месяц; это не прошедший недельный интервал
`*/7` в день месяца расширяется от минимального значения этого поля 1, создавая 1, 8, 15, 22 и 29, если эти даты существуют. Когда начинается следующий месяц, поле снова начинается с 1. Таким образом, он описывает выбранные календарные даты, а не непрерывно наступающий семидневный интервал. В феврале и более коротких месяцах просто не хватает высоких дат.
Тот же синтаксис имеет другое начальное значение в другом поле. `*/7` минут начинается с 0, тогда как `*/7` дней месяца начинается с 1. Анализатор ToolAcre извлекает последовательность из каждой спецификации поля, а его предварительный просмотр ищет календарные даты. Для фактической еженедельной частоты вращения ограничьте день недели вместо того, чтобы рассматривать шаг по дням месяца как истекшую продолжительность.
Неподдерживаемые операторы отклоняются, а не интерпретируются как еще один диалект cron.
Этот синтаксический анализатор с пятью полями не реализует `L`, `W`, `#` или `?`. Эти символы не отбрасываются автоматически и не представляются в виде переносимого синтаксиса crontab. Шесть полей также отклоняются, объясняя это тем, что дополнительная лидирующая позиция принадлежит стилю планировщика, ориентированному на секунды, а не формату, который читает этот маршрут.
Граница выбрана намеренно: минута, час, день месяца, месяц и день недели — вот полная позиционная грамматика. Прежде чем перемещать выражение из другого планировщика, подсчитайте его поля и определите его операторы. Генератор может проверить свой собственный диалект; он не может сертифицировать Quartz, синтаксис календаря systemd или вариант облачного сервиса.
Вывод: шаги означают «начиная с нижней части диапазона» — и генератор объясняет выражение шага словами, которые вы можете проверить.
Диапазоны определяют включающий диапазон, запятые объединяют части и сокращают выборочные значения от начала, специфичного для поля. Чтение этих операций в таком порядке превращает плотный токен в конечное множество, которое можно проверить. Он также объясняет такие ребра, как 17:45, не полагаясь на скопированную фразу, автор которой мог иметь в виду что-то другое.
Используйте генератор как обзорную поверхность: введите выражение, прочитайте описание, просмотрите предупреждения и сравните следующие пять прогонов настенных часов в заданной зоне. Затем поместите проверенные пять полей рядом с реальной командой в вашей среде. Составление расписания и выполнение работ остаются отдельными обязанностями.