Самая страшная производственная ошибка, которую я когда-либо вызывала, - это один символ в выражении cron. я хотела, чтобы резервная копия базы данных запускалась каждый вечер в полночь. я написала 0 0 * * * в моей голове, напечатанной 0 0 * * 0 в crontab, и пошел дальше. задание бежало один раз - следующее воскресенье - и затем не снова в течение недели. я узнал, когда мне нужна была резервная копия, которой не существовало. эта единственная неуместная цифра превратилась & quot;каждый день& quot; в & quot;каждое воскресенье, & quot; и ничто в синтаксисе не предупреждало меня.Крон делает именно то, что вы говорите ему, молча, навсегда.
TL;DR: выше Генератор выражений cron строит стандартное выражение crontab из пяти полей из простых полей или предустановок одним щелчком мыши, объясняет его в предложении по мере ввода и предварительно просматривает следующие времена выполнения в UTC, чтобы вы могли подтвердить расписание до того, как оно достигнет производства. Он полностью работает в вашем браузере - ни учетной записи, ни загрузки.
Я построил этот инструмент для Toolz.dev, потому что я никогда больше не хотел фиксировать график, который я только проверил в своей голове. чтение выражения cron обратно как простой английский и видеть фактические даты, что он будет стрелять ловит 0 -версус- * класс ошибки мгновенно. это руководство охватывает, как работает синтаксис cron, взаимодействия, которые сбивают с толку почти всех, и как использовать генератор для создания выражения, которому можно доверять.
Что такое выражение cron?
Выражение cron - это компактное расписание, состоящее из пяти полей, разделенных пробелами. Слева направо это минута, час, день месяца, месяца и день недели. форма с пятью полями задается POSIX в формат входа Crontab. Планировщик - классический Unix cron демон, а также системы CI, Kubernetes CronJobs и бесчисленное количество участников задач - считывает выражение и запускает вашу работу в каждый момент, соответствующий всем полям.
Каждое поле принимает более одного числа Звезда (*) означает & quot;every& quot; значение этого поля. список, как 1,15,30 означает несколько конкретных значений. диапазон, как 1-5 означает инклюзивный интервал. Шаг, похожий на */15 означает & quot;каждый пятнадцатый & quot; значение, начинающееся с поля и #39;s минимум. вы объединяете их по пяти полям, чтобы описать практически любой повторяющийся график: каждую минуту, каждый квартал час, будние дни в 8 утра, первый каждый месяц, последний квартал и #39;s день открытия. мощность реальна, и так же плотность - пять полей могут кодировать удивительно точный график, именно поэтому их легко получить тонко неправильно.
Вот схема поля, которую использует генератор, с допустимым диапазоном для каждого:
| Должность | поле | Диапазон | банкноты |
|---|---|---|---|
| 1 | мелкий | 0–59 | |
| 2 | час | 0–23 | Круглосуточные часы |
| 3 | день месяца | 1–31 | |
| 4 | месяц | 1 — 1 | JAN-DEC также принято |
| 5 | день недели | 0 –6 | 0 и 7 означают воскресенье; SUN-SAT принято |
Зачем генерировать выражение, а не писать его вручную
Написание cron вручную - это ставка, что вы правильно запомнили порядок полей, диапазоны и взаимодействия, без обратной связи, пока задание не выполняется или не выполняется. Генератор заменяет эту ставку подтверждением. Заполняя поля, он делает три вещи одновременно.
Во-первых, он собирает и проверяет выражение, улавливая значения вне диапазона, обратные диапазоны и неверные шаги с сообщением, которое называет поле-нарушитель. Выражение типа 0 25 * * * - 25-го часа не существует - отвергается с объяснением, а не принимается и молча никогда не бежит.
Во-вторых, это представляет расписание как предложение. 0 8 * * 1-5 становится & quot;В 08:00 с понедельника по пятницу. & quot; чтение расписания словами - это самый быстрый способ заметить, что то, что вы построили, не то, что вы имели в виду. Моя ошибка резервного копирования в полночь была бы очевидна в тот момент, когда я прочитал & quot;В 00:00 в воскресенье & quot; вместо & quot;В 00:00. & quot;
В-третьих, он просматривает фактическое предстоящее время выполнения. Видеть, что работа будет в следующий раз уволена через три месяца, а не сегодня вечером, говорит вам, что что-то не так, гораздо более визуально, чем смотреть на звездочки. Этот предварительный просмотр также выявляет невозможные графики - попросите 30 февраля, и генератор вообще не покажет предстоящих запусков, потому что их нет.
Как использовать генератор выражений Cron
Шаг 1: Начните с предустановленного или чистого листа
Самый быстрый путь к правильному выражению - начать с того, что уже близко. Выберите предустановленное, как & quot;Weekdays в 8 утра, & quot; & quot;Каждые 15 минут, & quot; или & quot;Первый месяц в полночь, & quot; и поля загружаются готовыми к настройке. если ни одно не подходит, начните с каждой минуты по умолчанию и отредактируйте. Пресеты существуют, потому что большинство реальных расписаний являются вариациями на дюжине общих шаблонов, а начиная с выражения "известно-хорошо" устраняет целую категорию ошибок.
Шаг 2: Установите пять полей
Введите значение в каждое поле или оставьте его как * для & quot;every. & quot; каждое поле принимает одно значение, список запятых, диапазон дефисов или шаг косой черты Например, чтобы работать в верхней части каждого часа в рабочее время в будние дни, установить минуту на 0от часа до 9-17и день недели до 1-5оставляя день месяца и месяц как *. Подсказка под каждым полем напоминает вам о его допустимом диапазоне, поэтому вам не нужно запоминать порядок.
Шаг 3: Прочтите описание на простом английском языке
Смотрите обновление описания по мере того, как вы вводите Это шаг, который спасает вас Если предложение не соответствует расписанию в вашей голове, выражение неправильно, и вы узнали в браузере, а не в производстве неделю спустя Подтвердите время, дни, и любое ограничение месяца читать так, как вы намереваетесь.
Шаг 4: Проверьте следующие прогоны и скопируйте
Нажмите, чтобы просмотреть предстоящее время выполнения, рассчитанное в UTC. Сканируйте их на наличие чего-нибудь удивительного - слишком длинного пробела, слишком далекого первого пробега или пустого списка, сигнализирующего о невозможной дате. Когда расписание выглядит правильно, скопируйте выражение и вставьте его в манифест crontab, painpine или CronJob.
Ловушка дня месяца и дня недели
Если вы помните одну вещь о cron, сделайте это так, потому что это удивляет почти всех в первый раз. когда оба поле дня месяца и поле дня недели ограничены, то есть ни то, ни другое * - стандартный крон объединяет их с ИЛИ, а не С И. Задача выполняется, когда либо условия совпадения.
Так 0 0 13 * 5 не означает & quot;полночь в пятницу 13-го. & quot; Это означает & quot;полночь 13-го числа каждого месяца, а также полночь в каждую пятницу. & quot; Это очень разные графики; второй горит много раз в месяц. такое поведение исходит прямо из оригинальной реализации Vixie cron, которую наследует большинство планировщиков, и генератор точно чтит ее. Его предварительный просмотр в следующем выпуске покажет вам и 13-е, и пятницы, что является самым ясным способом поймать непреднамеренное ИЛИ.
Практическое правило: оставьте одно из двух дневных полей как * если только вы действительно не хотите поведения ИЛИ. Если вам действительно нужен & quot;Только пятница, 13-е число, & quot; cron не может выразить это одним выражением - вы обрабатываете эту логику в своей работе. Видеть фактические даты запуска в предварительном просмотре - вот что превращает это из скрывающегося попа в очевидный, видимый факт.
Шаги, диапазоны и списки на практике
Синтаксис шагов - это место, где живет большая часть возможностей планирования и где начинается большая путаница. */5 в поле минут означает минуты 0, 5, 10, 15, и так далее до 55 - & quot; каждые пять минут.& quot; можно закрепить шаг на диапазон: 0-30/10 означает только минуты 0, 10, 20 и 30. Голое значение с шагом, например 5/15 в минутном поле означает & quot;начиная с 5, каждые 15 & quot; до максимума поля - 5, 20, 35, 50.
Списки и диапазоны свободно объединяются. 1,4,7,10 в поле "МЕСЯЦ" приведено ежеквартальное расписание - январь, апрель, июль, октябрь. 1-5 в день недели дает вам с понедельника по пятницу. 9-17 в поле часа даётся окно девять к пяти Смешивая их, 0 9-17 * * 1-5 читается как & quot;в минуту 0 каждого часа с 9 утра до 17:00, с понедельника по пятницу & quot; - обычное сердцебиение в часы работы Генератор расширяет и проверяет все это, и в описании указано, что вы построили, чтобы не было никакой двусмысленности, скажем, относительно того, является ли диапазон инклюзивным (это так).
Общие варианты использования
Запланированные резервные копии и обслуживание. Каноническая работа крона. Генерировать 0 2 * * * для ночной 2-х утра резервного копирования, прочитайте описание, чтобы подтвердить, что это ежедневно, а не еженедельно, и предварительно просмотреть следующие запуски, чтобы быть уверенным, что первый сегодня вечером Это точная ошибка, которую я сделал много лет назад, и точная, что предварительный просмотр предотвращает.
КИ и графики развертывания. Ночные сборки, запланированные тестовые запуски и периодические развертывания - все они используют синтаксис cron в GitHub Actions, GitLab CI и подобных системах. создайте выражение здесь, подтвердите его и вставьте в файл рабочего процесса. поскольку эти системы работают на своих собственных серверах, обратите внимание на оговорку о часовом поясе ниже.
Конвейеры данных и отчеты. Еженедельный отчет каждый понедельник в 6 утра 0 6 * * 1; ежемесячный ролл на первом 0 0 1 * *; ежеквартальная работа 0 0 1 1,4,7,10 *. Создание их и чтение обратно останавливает классический & quot;ran в неправильный день& quot; инцидент с трубопроводом.
Согревание кэша и сердцебиение. Высокочастотные задания типа */5 * * * * держите кэши теплыми или проверки здоровья тикают. предварительный просмотр подтверждает, что интервал - это то, что вы ожидаете, а не, скажем, раз в час, потому что вы поставили шаг в неправильном поле.
Обучение cron. Если вы все еще строите интуицию, генератор - это обучающий инструмент. Введите выражение, прочитайте предложение, посмотрите прогоны, и сопоставление между синтаксисом и поведением становится конкретным таким образом, что документация сама по себе никогда не управляет.
Примечание о часовых поясах
Предпросмотр следующего запуска вычисляет время в UTC, поэтому результат детерминирован и одинаков для всех, кто читает это. Real cron демоны, однако, запускаются в сервер 's локальный часовой пояс, если не настроен иначе, и CI провайдеры каждый имеет свое собственное соглашение - многие по умолчанию UTC, некоторые нет. само выражение не несет часовой пояс; это планировщик решает. поэтому, когда вы переместите выражение из этого инструмента в живую систему, подтвердите, что система & #39;s часовой пояс и соответственно смещать время выполнения в вашей голове. А 0 0 * * * работа полуночная, но полночь где полностью зависит от того, где выполняется задание. Если вам нужно рассуждать о смещении часового пояса, преобразователь часового пояса удобно, и преобразователь timestamp помогает, когда журналы планировщика работают как временные метки Unix.
Генерация и анализ выражения
Этот инструмент создает выражение из полей. Его брат, синтаксический анализатор выражение cron, идет другой путь: вставить существующее выражение и он объясняет его и предпросматривает его прогоны. эти два охватывают два направления одной и той же проблемы. использовать генератор, когда вы знаете расписание вы хотите и нужно синтаксис; использовать синтаксис, когда вы унаследовали выражение и нужно понять, что он делает. оба чтят одну и ту же семантику Викси-крона, включая правило дня месяца ИЛИ дня недели, поэтому описание, которое вы читаете в одном соответствует поведению, которое вы бы видели в другом. вместе они небольшая, сфокусированная пара в рамках более широкого набора, который я описываю в Набор инструментов для веб-разработчиков обзор и шире Руководство по инструментам кодирования, йо-
Конфиденциальность: все это работает в вашем браузере
Здесь нечего загружать, и ничего не загружается. выражение построено, проверено, описано и смоделировано полностью в клиентском коде. Это имеет большее значение, чем может показаться: внутренние графики заданий могут раскрыть вещи о системе 's архитектура и ритм, которые вы не хотели бы сидеть в третьей стороне и #39;s журналы. Вы можете подтвердить, что инструмент является автономным, отключившись от Интернета - он продолжает работать. это тот же клиентский принцип, который стоит за каждым инструментом на Toolz.dev, для которого я полностью обосновываю в Конфиденциальность данных в онлайн-инстру статья.
часто задаваемые вопросы
Как написать выражение cron?
Стандартное выражение cron имеет пять полей, разделенных пробелами: минута, час, день месяца, месяца и день недели. Каждое поле представляет собой определенное значение, список, диапазон, шаг или * для каждого. например 0 8 * * 1-5 означает в 08:00 с понедельника по пятницу. Этот инструмент создает выражение для вас и показывает, что это значит, когда вы идете.
Что означают пять полей Крон?
Слева направо они - минута (0 い59), час (0 北3), день месяца (1 ₽31), месяц (112), и день недели (06, где 0 и 7 оба означают воскресенье).Звезда в поле означает & quot;every" значение этого поля. инструмент маркирует каждое поле, чтобы вам не приходилось запоминать порядок.
Что делает */5 значит в кроне?
Косая черта вводит значение шага. В поле минуты, */5 означает & quot; каждые 5 минут & quot; - 0, 5, 10, 15 и т. д. Вы можете комбинировать шаги с диапазонами тоже: 0-30/10 в поле минут означает минуты 0, 10, 20 и 30. Шаги - стандартный способ выразить & quot;каждый N единиц. & quot;
Почему моя работа работает чаще, чем ожидалось, с набором в день и день недели?
Это самый распространенный сюрприз cron. Когда и день месяца, и день недели поля ограничены (ни того, ни другого нет) *), стандартный крон рассматривает их как ИЛИ, а не И - задание выполняется, когда любое условие совпадает. Итак 0 0 13 * 5 бежит 13-го числа месяца и каждую пятницу, не только в пятницу 13-го. оставьте одно поле как * если только вы действительно не хотите поведения ИЛИ.
В каком часовом поясе показано следующее время выполнения?
Предварительный просмотр вычисляет предстоящие запуски в UTC, поэтому результат один и тот же для всех. настоящие демоны cron используют часовой пояс сервера (или настройку TZ), поэтому, если ваш сервер работает в другой зоне, смещайте время соответственно. само выражение не несет часовой пояс - это планировщик, который решает.
Могу ли я использовать такие имена, как пн или ян вместо цифр?
Да. Поле месяца принимает JAN через DEC и поле дня недели принимает SUN через SAT, нечувствительный к регистру. инструмент понимает их при проверке и описании вашего выражения. числовые значения более переносимы для планировщиков, поэтому генератор излучает числа, но именованный вход полностью поддерживается.
Это то же самое, что синтаксис crontab?
Да, это генерирует стандартный пятипольный Unix/Vixie cron, используемый crontab, большинством систем CI и Kubernetes CronJobs. Некоторые планировщики добавляют поле шестой секунды или нестандартные расширения, такие как @reboot; те не являются частью стандарта пяти полей. для подавляющего большинства потребностей планирования выражение из пяти полей, которое производит этот инструмент, - это именно то, что вы хотите.
Мой график отправляется куда-нибудь?
Нет. Выражение полностью создано, проверено, описано и смоделировано в вашем браузере с помощью клиентского кода. Ничего не загружается и не сохраняется. Вы можете подтвердить это, отключившись от Интернета - генератор все еще работает.



