Инструменты разработчика · Генератор Crontab
Cron и летнее время: почему задание 02:30 может пропуститься или запуститься дважды
· Почему это важно
хрон часовые пояса летнее время
Дважды в год настенные часы сбиваются, и задание cron, запланированное в промежутке или перекрытии, ведет себя неожиданно. В этом посте объясняется, что делают cron, созданные на основе Vixie, что делают другие и как это спланировать.
Отсутствующий кандидат для предварительного просмотра может возникнуть, если в выбранной зоне нет такого времени на настенных часах.
Ежедневное время на настенных часах может отсутствовать в день, когда выбранный часовой пояс переводит часы вперед. ToolAcre представляет этот случай, не возвращая момент для несуществующей локальной минуты и пропуская ее в списке следующего запуска. Выражение остается действительным; один календарный кандидат просто не может быть конвертирован в реальное мгновение в этой зоне.
Такое поведение реализовано в `wallClockToEpoch`, который преобразует предлагаемые локальные дату и время, форматирует результат обратно в ту же зону и сравнивает каждый компонент. Несоответствие возвращает ноль. `nextRuns` игнорирует нулевых кандидатов и продолжает поиск, предотвращая появление сфабрикованного ближайшего времени так, как если бы оно точно соответствовало расписанию.
Два события — скачок вперед, отдающий час, и осенний откат назад, повторяющий один час.
Изменения часов создают два концептуальных случая: прямой разрыв со временем стены, которое никогда не происходит, и обратное перекрытие, когда некоторые метки встречаются более одного раза. В репозитории есть тесты для поддержания ежедневного местного часа при прямом изменении и для исключения несуществующего весеннего времени. Он не содержит полного набора тестов политики перекрытия.
Эта граница свидетельства важна, поскольку реализации планировщика могут делать разные выборы. В этой статье описывается алгоритм предварительного просмотра в браузере, а не поведение универсального демона. Прежде чем полагаться на повторяющуюся задачу во время смены часов, прочитайте и протестируйте фактический планировщик на целевом хосте, а не превращайте предварительный просмотр в обещание выполнения.
ToolAcre опускает несуществующее местное время; он не моделирует каждую политику демона, производную от Vixie.
В рабочей книге утверждается, что определенные демоны, производные от Vixie, запускают пропущенные задания после перехода и подавляют дубликаты. ToolAcre не делает ни того, ни другого в своем предварительном коде: он опускает кандидата, локальные компоненты которого не могут выполнять двусторонний обмен. Пакет демонов не вызывается и политика догона не моделируется. Таким образом, эти эксплуатационные претензии скорее корректируются, чем повторяются.
Протестированный пример в Лондоне ищет 01:30 в районе мартовского изменения 2026. Поскольку эта местная минута не существует в дату перехода, возвращаемые дни представляют собой следующие допустимые даты. Это доказывает поведение собственного списка маршрута. Он не устанавливает, что отдельно установленный процесс cron делает с уже сохраненной строкой.
Поведение планирования с использованием подстановочных знаков во внешних демонах является свидетельством внешнего хранилища.
Синтаксический анализатор расширяет звезды до каждого допустимого значения, но более позднее преобразование настенных часов по-прежнему решает, соответствует ли конкретная дата-время моменту. ToolAcre не имеет отдельного правила внешнего демона для «заданий с подстановочными знаками». Все кандидаты используют один и тот же код поиска по календарю и код преобразования зоны.
Описания остаются чисто грамматическими: `* * * * *` читается как каждая минута, а ступенчатое поле минут получает пошаговую формулировку. В этом предложении не рассказывается о политике перехода. Используйте список следующего запуска для расчетных примеров инструмента и не делайте вывод о гарантии догона, повтора или подавления дубликатов только на основе описания.
Другие реализации не выводятся из этого предварительного просмотра браузера.
Реализация зоны опирается на данные `Intl.DateTimeFormat`, предоставляемые браузером или средой выполнения Node. ToolAcre проверяет предоставленное имя зоны IANA, предлагает список поддерживаемых движком, если он доступен, и включает UTC. Он не проверяет BusyBox, оркестраторы контейнеров или продукты облачного cron.
Если другой планировщик не согласен, рассматривайте это как вопрос диалекта и времени выполнения. Запишите его версию, конфигурацию зоны и наблюдаемое поведение перехода. Предварительный просмотр в браузере по-прежнему полезен для прозрачного сравнения, но его код не может ответить, какую политику применяет другая служба или повторяет ли эта служба пропущенную работу.
Рабочий пример: выберите время на стене и проверьте вычисленных кандидатов ToolAcre.
Более безопасный метод — выбрать зону развертывания, ввести предлагаемое ежедневное выражение и проверить даты следующего перехода, известного этой среде. Если требуемый кандидат отсутствует, выберите другое время стены или политику планировщика, которую цель явно документирует. Повторно запустите предварительный просмотр после изменения часа.
В исходном коде есть предустановка 02:30, но она является примером, а не универсальной рекомендацией. Срок действия зависит от выбранного календаря и зоны. Окно с пятью результатами ToolAcre может не охватывать отдаленный переход, поэтому при аудите поведения реализации выбирайте подходящий начальный контекст в тестах.
Выбор зоны является частью этого предварительного просмотра и обсуждается здесь только как поведение инструмента.
В отличие от разделения книги, обработка зон является непосредственно частью предварительного просмотра этого инструмента. Панель спрашивает «Показать следующие запуски» и предупреждает, что машина, на которой запущен cron, может использовать зону, отличную от зоны чтения. Выбор зоны меняет результирующие моменты, сохраняя при этом поля настенных часов выражения.
Выбор настраивает только расчет браузера. Он не записывает директиву часового пояса, не обновляет сервер и не встраивает выбор в скопированное выражение. Сохраните предполагаемую зону в документации по соседнему развертыванию, а затем настройте реальный планировщик с помощью механизмов, проверенных для этой среды.
Вывод: предварительный просмотр в намеченной зоне без рассмотрения списка как гарантии выполнения
Список следующего запуска представляет собой выходные данные модели из пяти полей, начального момента, календарной арифметики и данных зоны браузера. Это полезно для определения несуществующего времени и случайного смещения часов. Он не остается ни следом демона, ни свидетельством выполнения команды.
Используйте предварительный просмотр, чтобы определить рискованное время стены, а затем проверьте целевой планировщик на границе перехода. Оправданное обещание ToolAcre узкое: ежедневные рабочие места остаются в выбранное местное время, когда этот час существует, а несуществующие местные кандидаты исключаются. Все, что сверх этого, принадлежит развернутой системе.