我正在使用 runit 进行流程监督。我有以下简单的服务运行脚本:
#!/bin/sh -e
cd /opt/myapp
exec 2>&1
exec chpst -u ubuntu /home/ubuntu/.rvm/bin/myapp_foreman start -t 1 -c web=1,worker=1
这开始使用 RVM 包装器使用适当的 RVM 环境包装工头。一切都开始并运行良好,但是当我发出问题时,sv down myapp
我可以在日志中看到工头报告接收 SIGTERM 并且工头进程终止,但子 Web 和工作进程继续运行。
如果我只是使用 kill 而不是通过 runit 手动向工头发送 SIGTERM,也会发生此问题,因此可能不是特定于 runit 的。但是,如果我以交互方式运行工头,然后执行 Cc 以发送正常工作的 SIGINT。但是,通过 kill 发送 SIGINT 和 SIGKILL 不起作用。
有没有办法让工头在非交互式运行时终止它的子进程,就像我在我的 runit 脚本中一样?