我使用 Supervisor 来管理进程。是否可以让 Supervisor 在收到 SIGTERM(或其他信号)时运行命令?
答案1
不可以,如果不更改源代码并添加该功能,就无法定制 Supervisor 接收到信号时的行为。
您唯一能做的就是通过“stopsignal”选项指定进程停止时的终止信号。
答案2
以下是实现您想要的一种方法:
(1)创建一个新的shell脚本,我们将其命名为woker.sh
:
#!/bin/bash
function do_something {
# do something
exit 0
}
trap do_something SIGTERM
while true; do
sleep 1
done
(2)将上述脚本文件supervisord.conf
作为新的程序部分添加到您的 Supervisor 配置文件中:
[program:worker]
command=/usr/local/bin/worker.sh
stderr_logfile = /var/log/supervisord/worker-stderr.log
stdout_logfile = /var/log/supervisord/worker-stdout.log
你可以找到一个真实的例子这里。