Отправка общего сигнала дочернему процессу супервизора

Я использую supervisord для управления кучей процессов. Можно ли использовать supervisorctl для отправки произвольных сигналов этим процессам, фактически не останавливая их и не устанавливая стоп-сигнал?


person user1578214    schedule 29.11.2012    source источник


Ответы (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.

person Martijn Pieters    schedule 30.11.2012
comment
Я предпочел делать такие вещи как одну большую команду sed, например: sed -n '/RUNNING/s/.*pid \([[:digit:]]\+\).*/\1/p' вместо grep | awk | sed | paste и т. д. - person Mark Harviston; 16.04.2013
comment
@MarkHarviston: В моей командной строке UNIX чего-то не хватает, ваш подход вполне может быть лучше моего. - person Martijn Pieters; 16.04.2013
comment
как жаль, я хочу отправить hup от supervisorctl :(((( - person igor; 17.10.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
person keen    schedule 28.01.2016

Существует сторонний плагин для супервизора. называется mr.laforge, который

Позволяет легко убедиться, что супервизор и определенные процессы, контролируемые им, выполняются из оболочки и сценариев Python. Также добавляет команду kill в супервизор, которая позволяет отправлять произвольные сигналы дочерним процессам.

person fayaz    schedule 13.05.2014