Обновить

Как мы устали настраивать Crontab и сделали свой cron-manager

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.1K
Всего голосов 5: ↑5 и ↓0+5
Комментарии9

Комментарии 9

Совет для тех кому предстоит запускать много друг от друга зависящих заданий через crontab посмотреть в сторону luigi, dagster, Apache Airflow.

Отправил техдиру почитать 👍

в случае перезагрузки сервера, прерванные задания должны начать свою работу заново

А если задания неидемпотентны?

Тут сложнее, ваши кейсы могут быть сложнее, чем мой совет ниже.

В нашем случае стараемся делить задачи на такие блоки, которые можно "дернуть ручкой" на предыдущий этап. То есть, задание проверяет входные данные и может выйти на рекурсию на Х шагов назад. Разумеется, что число таких шагов тоже надо считать и разбирать каждый случай.

Все-таки мне странно что ничего готового не нашли.
Как замена крону - https://www.rundeck.com/,
для мониторинга крона я использовал https://deadmanssnitch.com/docs/cron-job-monitoring , https://healthchecks.io/

Все было лет пять назад, так что може быть устарело.

HealthChecks как раз первый в списке, но он observer, а надо было побольше всего.

Второй сервис тоже был, но он тоже про анализ падения, а нам на старте надо было увязать задания друг за дружкой. Алерт успешного выполнения мы уже проходили простым сообщением, человек ручками запускал следующий скрипт. А надо вебхук дернуть, хотя бы.

RunDeck посмотрел сейчас, кажется мощным оркестратором сложных интеграций, который в том числе решает вопросы с cron'ом. В первом приближении кажется, что он так же будет тяжелым для решения узкой задачи.

Бережное отношение к загрузке сервера (CPU, RAM) стояло у нас в критериях высоко. Забыл об этом упомянуть в статье.

Ну и досадный момент — опенсорс нам зарубили в какой-то момент волевым решением, пришлось решать вопросы привычным методом.

"опенсорс нам зарубили " - с этого я бы и начал :-(

Драматургия пострадает, надо же "завязка -> кульминация -> развязка" чтить еще =)

А я просто в под каждое задание держу файл с его текущим статусом.

Запущен, работает, выполнено.

И если где-то нужно, то смотрю в файл соседнего задания, чтобы дождаться нужного момента.

Также держу одно задание, независимое от кода проекта, которое контролирует эти файлы и пишет мне в телегу, если, например, в каком-то из них слишком долго "выполняется".

Это я так очень кратко логику постарался объяснить. Не знаю, никто не учил, мне вроде бы работает. Проекты тоже тяжелые достаточно. Парсинги, маркетплейсы

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации