Как автоматически перезапустить программу на Python после ее завершения? Supervisord?

У меня есть программа на Python, которую я хотел бы постоянно запускать обновления и собирать новые данные. По сути, я собираю данные из нескольких доменов. Мои процессоры работают около полутора дней. Как только они закончат, я бы хотел, чтобы они автоматически начали все заново.

Я не хочу использовать while цикл просто перезапускает процессы, не убивая сначала все, что связано, потому что некоторые пакеты, которые я использую для поддержки этих процессоров (в основном, pyV8), имеют проблему с медленным накоплением памяти, и я не достаточно хороший программист, чтобы погрузиться в отладку памяти утечка в большой упаковке, как это. Итак, мне нужны все связанные процессы, чтобы успешно умереть, а затем вернуться к жизни.

Я слышал что supervisord может выполнять эту работу, но не любит возиться с .conf файлы и предпочел бы хранить все внутри Python.

Описание: есть ли пакет, который убьет все связанные процессы с помощью скрипта / пакета, который я мог бы использовать, чтобы поместить в цикл while или создать такое поведение внутри скрипта python?

1 ответ

Решение

Я не понимаю, почему вы не могли использовать supervisord, Конфигурация действительно простая и очень гибкая, и она не ограничивается программами на Python.

Например, вы можете создать файл /etc/supervisor/conf.d/myprog.conf:

[program:myprog]
command=/opt/myprog/bin/myprog --opt1 --opt2
directory=/opt/myprog
user=myuser

Затем перезагрузите конфигурацию супервизора:

$ sudo supervisorctl reload

и это включено. Разве это не достаточно просто?

Больше о supervisord конфигурация: http://supervisord.org/subprocess.html

Другие вопросы по тегам