Я использую supervisord для управления кучей процессов. Можно ли использовать supervisorctl для отправки произвольных сигналов этим процессам, фактически не останавливая их и не устанавливая стоп-сигнал?
Отправка общего сигнала дочернему процессу супервизора
Ответы (3)
До версии 3.2.0 (выпущенной в ноябре 2015 г.) supervisorctl
не поддерживал отправку произвольных сигналов процессам, которыми он управляет.
Начиная с версии 3.2.0 используйте supervisorctl signal
:
signal <signal name> <name> Signal a process
signal <signal name> <gname>:* Signal all processes in a group
signal <signal name> <name> <name> Signal multiple processes or groups
signal <signal name> all Signal all processes
so
supervisorctl signal HUP all
отправит SIGHUP
всем процессам, управляемым супервизором.
До версии 3.2.0 вы могли использовать supervisorctl status
для вывода списка pid
управляемых процессов. Затем используйте kill
для отправки сигналов этим pid
. С помощью небольшой магии sed
вы даже можете извлечь эти pid
, чтобы их можно было использовать в качестве входных данных для команды kill
:
kill -HUP `bin/supervisorctl status | sed -n '/RUNNING/s/.*pid \([[:digit:]]\+\).*/\1/p'`
также отправит SIGHUP
всем активным процессам под управлением supervisord
.
sed
, например: sed -n '/RUNNING/s/.*pid \([[:digit:]]\+\).*/\1/p'
вместо grep | awk | sed | paste
и т. д.
- person Mark Harviston; 16.04.2013
Начиная с версии 3.2.0 теперь вы МОЖЕТЕ отправлять произвольные сигналы процессам!
$ supervisord --version
3.2.0
$ supervisorctl signal help
Error: signal requires a signal name and a process name
signal <signal name> <name> Signal a process
signal <signal name> <gname>:* Signal all processes in a group
signal <signal name> <name> <name> Signal multiple processes or groups
signal <signal name> all Signal all processes
$ supervisorctl signal HUP gateway
gateway: signalled
Существует сторонний плагин для супервизора. называется mr.laforge, который
Позволяет легко убедиться, что супервизор и определенные процессы, контролируемые им, выполняются из оболочки и сценариев Python. Также добавляет команду kill в супервизор, которая позволяет отправлять произвольные сигналы дочерним процессам.