Ruby 通过runit杀死foreman子进程
我使用runit进行过程监控。我有以下服务的简单运行脚本:Ruby 通过runit杀死foreman子进程,ruby,foreman,sigint,sigterm,runit,Ruby,Foreman,Sigint,Sigterm,Runit,我使用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时,我可以在日志中看到foreman报告接收到SIGTE
#!/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
时,我可以在日志中看到foreman报告接收到SIGTERM,foreman进程终止,但子web和worker进程继续运行
如果我只是使用kill而不是通过runit手动向foreman发送SIGTERM,也会出现此问题,因此可能不是特定于runit的。但是,如果我以交互方式运行foreman,然后执行C-C发送正确工作的SIGINT。不过,通过kill发送SIGINT和SIGKILL是行不通的
有没有一种方法可以让foreman在以非交互方式运行时终止其子进程,就像我在runit脚本中所做的那样