我正在使用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环境包装的foreman。一切都开始并运行良好,但是当我发出sv down myapp
时,我可以在日志中看到工头报告接收SIGTERM并且工头流程终止,但子网络和工作进程继续运行。
如果我只是使用kill而不是runit手动将SIGTERM发送给工头,也会发生此问题,因此可能不是特定于runit的。但是,如果我以交互方式运行foreman然后执行C-c以发送正常工作的SIGINT。但是,通过kill发送SIGINT和SIGKILL不起作用。
有没有办法让我的工头在非交互式运行时终止其子进程,就像我在我的runit脚本中一样?