【发布时间】:2012-11-29 18:35:08
【问题描述】:
我正在使用 supervisord 来管理一堆进程。是否可以使用 supervisorctl 向这些进程发送任意信号而不实际停止它们并设置停止信号?
【问题讨论】:
标签: supervisord
我正在使用 supervisord 来管理一堆进程。是否可以使用 supervisorctl 向这些进程发送任意信号而不实际停止它们并设置停止信号?
【问题讨论】:
标签: supervisord
在 3.2.0(2015 年 11 月发布)之前,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
所以
supervisorctl signal HUP all
会将SIGHUP 发送到主管管理的所有进程。
在 3.2.0 之前,您可以改为使用 supervisorctl status 列出托管进程的 pids。然后使用kill 向pids 发送信号。使用一点sed 魔法,您甚至可以提取那些pids 以作为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 等。
As of 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的third-party plugin for supervisor
让您轻松确保 supervisord 和受其控制的特定进程在 shell 和 Python 脚本中运行。 还向主管添加了一个 kill 命令,可以向子进程发送任意信号。
【讨论】: