Инструменты разработчика · Генератор Crontab
Перекрывающиеся задания cron: почему длинные задачи нуждаются в скоплении и как его добавить
· Почему это важно
хрон параллелизм операции
Cron запускает задание по расписанию независимо от того, завершился предыдущий запуск или нет. В этом посте объясняется, почему это приводит к повреждению и скачкам нагрузки, а также показана идиома стада, которая делает запуски эксклюзивными.
Два импорта записывают одну и ту же таблицу — почасовая работа стала медленнее часа, и cron продолжал запускать новые копии.
Почасовое выражение может идентифицировать нового кандидата, пока работа, связанная с предыдущим кандидатом, еще выполняется. Ничто в `0 * * * *` не записывает продолжительность, идентификатор процесса или состояние завершения. ToolAcre расширяет нулевую минуту для каждого часа и может отображать будущее время, но никогда не наблюдает за действиями между этими моментами.
Это означает, что частота и эксклюзивность должны рассматриваться отдельно. Если задача может продлиться дольше своего интервала, сначала определите продолжительность в целевой системе. Затем выберите поддерживаемый там элемент управления параллелизмом. Редактирование правильного расписания само по себе не может добавить информации о существующем процессе или предотвратить второй вызов.
Выражение не содержит состояния выполнения задания.
Анализатор не сохраняет состояние во всех вызовах. Он преобразует текст в отсортированные массивы значений и предупреждения, а `nextRuns` ищет даты без таблицы процесса. Пользовательский интерфейс пересчитывает текущее выражение и не сохраняет жизненный цикл задания. Его модель спрашивает, когда, а не никогда, остается ли предыдущее действие активным.
Это точное доказательство, стоящее за названием статьи. Он не требует утверждения о том, как каждый демон cron разветвляется или ставится в очередь. В самом языке выражений отсутствует поле перекрытия, а в генераторе отсутствует монитор времени выполнения. Любая гарантия эксклюзивности должна исходить от отдельного уровня, поведение которого проверяется независимо.
Возможные симптомы перекрытия зависят от команды и не прогнозируются генератором
Перекрытие может коррелировать с дублированной работой, конфликтом блокировок или нагрузкой, но эти результаты зависят от того, что делает команда. Идемпотентная проверка только для чтения и импорт с отслеживанием состояния имеют разные риски даже при одном и том же почасовом графике. ToolAcre не имеет анализатора команд, подключения к базе данных или модели ресурсов, на основе которой можно было бы их прогнозировать.
Документируйте свойства параллелизма действия вместо того, чтобы прикреплять к выражению общие прогнозы ошибок. Измерьте нормальную и наихудшую наблюдаемую продолжительность, определите общее состояние и решите, что означает пропущенный или задержанный запуск. Эти эксплуатационные факты определяют, необходима ли эксклюзивность; пять полей определяют только время кандидатов.
синтаксис и поведение стаи находятся за пределами этого репозитория
В книге прописаны `flock -n`, путь блокировки и поведение при выходе. В этом репозитории нет реализации или теста flock, поэтому этот модуль не проверяет этот синтаксис. Доступность платформы, разрешения файловой системы и срок действия блокировки — все это находится за пределами кода расписания браузера.
Если flock подходит для цели, используйте установленную документацию и протестируйте там безопасный сценарий конфликта. Не делайте вывод об успехе, поскольку поля с префиксом времени передают ToolAcre. Допустимое выражение может предшествовать недопустимой команде блокировки, так же как правильная блокировка может защитить расписание, написанное для другого диалекта.
Проработанная граница: проверка почасового времени без требования семантики блокировки.
Используйте `0 * * * *` в качестве рабочего расписания. В описании указывается нулевая минута каждого часа, а предварительный просмотр должен переходить к последовательным границам часов после начального момента. Это доказывает, что частота шагов ToolAcre рассчитывается. Это не доказывает, что происходит, когда продолжительность команды пересекает одну из этих границ.
Внесите это почасовое ожидание в тест параллелизма на целевой стороне. Запустите один безобидный долгоработающий экземпляр, доберитесь до следующего кандидата и наблюдайте за выбранным элементом управления. Храните результаты как свидетельство выполнения отдельно от проверки выражений. Это позволяет сохранить точную диагностику, если позже изменятся сроки или блокировка.
Альтернативные механизмы эксклюзивности требуют конкретных доказательств
Блокировки внутри скриптов, политики супервизора и поведение менеджера сервисов могут обеспечивать эксклюзивность, но их семантика не может быть оценена на основе этого источника. ToolAcre также не знает, допустимо ли отсутствие одного запуска, должна ли работа ставиться в очередь или должна быть завершена вторая попытка.
Определите эти результаты, прежде чем выбирать механизм. «Никогда не дублировать» — это только одна политика; объединение, организация очередей и параллелизм с разделенным состоянием — другие. Генератор может предоставить частоту кандидатов, используемую при обсуждении политики, в то время как выбор реализации остается основанным на фактической среде выполнения.
Распределенная блокировка остается за пределами анализа расписания и предварительного просмотра.
Блокировка, общая для всех хостов, обеспечивает координацию, выходящую за рамки расчета по местному календарю. В анализаторе не отображаются идентификаторы хоста, сетевое хранилище или аренда. Таким образом, статья избегает предположений, что локальный файл или предварительный просмотр в браузере решают проблему распределенного параллелизма.
Для работы с несколькими хостами используйте схему координации, в которой режимы сбоев, поведение владения и восстановления документированы и протестированы. Сохраняйте график из пяти полей как один из входных данных для этой системы. Выражение может быть полностью переносимым, в то время как уровень эксклюзивности глубоко зависит от среды.
Вывод: расписание и эксклюзивность — это отдельные проблемы: с первой справляется генератор, со второй — стайка.
Планирование ответов, когда станет приемлемой еще одна попытка; эксклюзивность отвечает, может ли она начаться. ToolAcre реализует только первый вариант посредством расширения полей и предварительного просмотра настенных часов. Отсутствие состояния процесса — это архитектурная граница, а не скрытое значение по умолчанию.
Создайте и проверьте частоту выполнения, измерьте длительность действий, а затем протестируйте политику параллелизма, поддерживаемую целевыми объектами. Если вы сообщите об этом как об отдельных элементах управления, оба будут доступны для проверки. Генератор не планирует задания, и скопированное выражение никогда не следует рассматривать как защиту от перекрывающегося выполнения.