Назад | Перейти на главную страницу

Утечка дочерних процессов супервизора, запускаемых через сценарий оболочки

Я использую 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