супервизор: как остановить супервизора на PROCESS_STATE_FATAL

Я использую supervisord для управления несколькими процессами в док-контейнере. Однако один процесс всегда является «главным», а другие контролируют и сообщают о процессах. Что я хочу сделать, так это убить супервизора, если главный процесс не запустится после повторных попыток.

То, что я пытался сделать, это использовать eventlistener, чтобы убить процесс:

[eventlistener:master]
events=PROCESS_STATE_FAIL
command=supervisorctl stop all

Но я не думаю, что подсистема событий настолько сложна. Я думаю, мне нужно написать прослушиватель событий для обработки событий. Это правильно? Есть ли более простой способ убить весь супервизор, если один из процессов сработает?

Спасибо


person Corby Wilson    schedule 07.07.2015    source источник


Ответы (2)


Еще одна попытка:

[eventlistener:quit_on_failure]
events=PROCESS_STATE_FATAL
command=sh -c 'echo "READY"; while read -r line; do echo "$line"; supervisorctl shutdown; done'

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

person Rbjz    schedule 27.01.2017
comment
Вы можете использовать bash и $PPID, чтобы вам не нужно было использовать supervisorctl: /bin/bash -c "echo READY; while read line; do kill $PPID; sleep 300; kill -9 $PPID; done" - person Evan Borgstrom; 11.07.2017

Ответил: прослушиватель событий супервизора

Параметр команды ДОЛЖЕН быть обработчиком событий, не может быть случайной командой.

person Corby Wilson    schedule 07.07.2015