Разбор IV из 5
Пересечения и задания дольше интервала
Когда два задания работают одновременно или одно не успевает закончиться до собственного следующего запуска — и почему сравнивать нужно в UTC.
Длительность — оценка с запасом
Cron знает только момент запуска, а сколько задание будет работать, знаете вы. Чтобы увидеть пересечения, CronLens просит длительность каждого задания в минутах.
Берите не среднее, а долгий случай: конец месяца, большую выгрузку, медленный день. Если архив обычно собирается за 20 минут, а раз в месяц — за 45, ставьте 45: пересечения случаются как раз в плохие дни.
Абсолютное время
Задания в разных поясах сравниваются по абсолютному времени, то есть в UTC. «Выгрузка заказов» в 01:00 UTC длится час, «Сверка остатков» в 04:30 по Москве — 20 минут. По записи между ними три с половиной часа, а в UTC это 01:00–02:00 и 01:30–01:50: сверка каждый день целиком попадает внутрь выгрузки.
Перевод часов может создать пересечение, которого нет в остальные дни, или убрать его. Задание в поясе с переводом сдвигается относительно UTC на час, а соседнее, записанное в UTC, остаётся на месте. Поэтому окно проверки полезно брать так, чтобы в него попала ночь перевода.
Когда пересечение нашлось
Самое простое — развести время: сдвинуть одно из заданий так, чтобы между концом первого и началом второго остался запас. Если задания конкурируют за одни данные, помогает запрет параллельного запуска — у многих оркестраторов есть такая настройка — или блокировка, которую задание берёт на время работы.
Задание дольше своего интервала — отдельный случай. */10 при длительности 25 минут означает, что пока идёт один запуск, начинаются ещё два. CronLens отмечает такие запуски знаком ⟲.
Это общие приёмы. Что произойдёт на самом деле — запустится ли вторая копия, будет ли она ждать или пропустится, — решает ваш планировщик. CronLens только показывает, где интервалы наезжают друг на друга.