Я использую supervisor 3 для демонстрации процесса python, который запускается через сценарий bash, который настраивает некоторую конфигурацию для python. Сценарий bash запускает программу Python на переднем плане, FWIW.
Эта установка имеет следующую проблему: когда супервизор пытается убить процесс, он убивает только сценарий bash, но не процесс python. Таким образом, у меня возникают утечки процессов Python, выполняющих старый код, и возникают всевозможные проблемы. Как я могу это исправить?
Есть ли какая-то опция конфигурации для супервизора, чтобы он также убивал дочерние процессы?
Поможет ли сценарий bash перехватить сигнал TERM и явно передать его дочернему элементу? Это кажется ненужным, поскольку, когда я запускаю его из интерактивной оболочки, дочерний процесс python просто останавливается.
Я вижу, что супервизор позволяет мне выбрать, каким сигналом убить, по умолчанию TERM
сейчас. Может ли это помочь?
Вот аналогичный вопрос по Stackoverflow:
Торнадо не перезапускается чисто в супервизоре
Решение, которое сработало для меня, заключалось в использовании stopasgroup = true
в соответствующих [program:x]
группа.
Недавно я написал статью, в которой обсуждается эта проблема и объясняется, как ее правильно решить:
http://veithen.github.io/2014/11/16/sigterm-propagation.html