Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Скрипт для перезапуска неактивных процессов python

Есть скрипт, который может выполняться очень долгое время и если он станет неактивным (упадет, зависнет) нужно его перезапустить.
Какие программы, библиотеки, скрипты, модули смогут перезапускать неактивные процессы питона?
Запускать буду на windows и linux (Raspbian)


Ответ

Программы подобного вида называются watchdog (сторожевая собака). Но вот только отследить, что процесс упал - просто, то отследить, что процесс завис - сложно, а иногда никак нельзя. Скрипт может молотить локальный массив и просто грузить процессор, а может зависнуть в бесконечном цикле.
Как я делал подобное. Скрипт должен как то обновлять данные, что он работает. Например, писать в лог или обновлять дату файла. Вачдог запускается cron или чем то другим раз в минуту (пять минут, час) и проверяет этот файл. Если ничего не поменялось - нужно перезапускать.
В другом проекте я просто встроил в скрипт маленький http сервер, который просто отдавал статистику. вачдог скрипт делал curlом запрос и смотрел на результат. Также вачдог умел отправлять письма-отчеты и слал смс, если перезапуск не удавался.
Как по мне, то вачдог - это специфическая программа, которая пишется под каждую конкретную ситуацию. Но в современных системах они часто уже достаточно хорошо встроены. В линуксе тот же systemd умеет перезапускать сервисы, если они упали (но есть ли он на малинке - не знаю).
Также в линуксах можно использовать runit
В виндовсе если сделать сервис, то сама винда сможет перезапускать упавший сервис.
Некоторые админы пишут скрипты вачдога в таком виде:
вечный цикл: проверить, запущен ли скрипт если не запущен и счетчик перезапусков не превысил лимит, перезапустить спать 5 минут
Но у этого подхода есть один недостаток - этот скрипт также может упусть. Но его сильный плюс - его легко сделать кроссплатформенным.

Комментариев нет:

Отправить комментарий