如何编写runit自定义停止脚本

ddi*_*hev 12 runit

我想要一个自定义的“停止”脚本runit( runsv) 在必须停止/重新启动进程时执行。目前它只是终止进程,然后运行“完成”脚本。但就我而言,我的进程会动态生成子进程,因此kill我需要 a"killtree"来摆脱它们,而不是 simple 。我怎么做?

我知道它应该通过controlrunit的选项来完成,但是从阅读文档来看,我并不清楚应该如何命名停止脚本:(

http://smarden.org/runit/runsv.8.html

cor*_*ump 13

从文档

对于发送到控制管道的每个控制字符 c,runsv 首先检查 service/control/c 是否存在并且是否可执行。如果是这样,它会启动 service/control/c 并等待它终止,然后再解释命令。如果程序以返回码 0 退出,runsv 将避免向服务发送相应的信号。命令 o 始终被视为命令 u。在命令 d 上,首先检查 service/control/t,然后检查 service/control/d。在命令 x 上,首先检查 service/control/t,然后检查 service/control/x。无法自定义可选日志服务的控制。

这意味着您需要创建一个service_name/control/X, X 是一个可执行文件,它将在您将相关sv命令发送到服务时运行,例如d命令 (down)。如果您的脚本以状态 0 退出,它不会尝试关闭服务本身。

基本上你需要一个可执行脚本,/etc/sv/<service>/control/d它可以做你想做的任何事情并杀死服务,清理 pids 等。