runit不会终止sv stop或sv reload的进程

我在一个AMI linux机器上的jenkins服务器上运行一个无头selenium进程,所有这些都由runitpipe理。

问题在于,发出“sv stop selenium”或“sv reload selenium”不会将旧实例沿其subprocess命名或杀死,而只是将它们从runsv进程中分离出来,所以它们会继续运行而不会知道它们,run在一个失败的重启尝试的服务。

我想我的问题是这样的: 如何编写runit自定义停止脚本

意思是:我应该尝试一个自定义的d控制脚本,以便手动清理。

我遵循这个想法: https : //stackoverflow.com/questions/392022/best-way-to-kill-all-child-processes

但是,从/ etc / sv / selenium / supervise / pid中获取pid并将其转发到循环没有任何区别。

有什么build议?

sv运行脚本:

#!/bin/sh exec 2>&1 exec chpst -u jenkins -U jenkins /usr/bin/xvfb-run \ --server-args="-screen 0 1024x768x32" \ /usr/bin/java -jar /usr/local/bin/selenium-server-standalone-2.42.1.jar \ -ensureCleanSession \ -browserSessionReuse 

如果将-P添加到chpst命令行,chpst将为您的服务创build一个新的进程组。 然后在你自定义的'd'脚本中,你可以读取pid和kill -TERM -pid把TERM信号发送给整个进程组。

只要没有subprocess创build自己的进程组,这应该工作。

但是,单独启动xvfb和java可能会更清晰(将它们分成两个runit服务)。