pkill -STOP "^svscan$"
通过 strace(1) daemontools的一些程序(svscan, svc, …), 可以简单了解daemontools对服务的控制方法。
| svscan | 该进程会扫描(每5秒)/service目录,以确保每个对应的目录都有一个supervise来监控。 |
| supervise | 该进程负责管理每个服务的运行。svc就是是通过与该进程的通信来控制对应服务的。 |
基于以上认知,删除一个daemontools启动的服务需要的步骤如下:
向svscan发送SIGSTOP信号,暂停svscan对/service的扫描。
pkill -STOP "^svscan$"
|
|
这一步是为了防止当我们杀掉supervise时,svscan又会重新启动新的supervise。 |
如果服务有log,先杀掉log的supervise进程
fuser -k /service/$SERVICE_NAME/log
杀掉服务的supervise进程
fuser -k /service/$SERVICE_NAME
删除supervise目录
rm /service/$SERVICE_NAME/{log/supervise,supervise}
|
|
由于一些服务的目录可能是symbolic link, 删除服务的目录并不会删除其下的supervise目录。因此这里先删除之。 |
删除服务对应的目录
rm /service/$SERVICE_NAME
恢复svscan进程的运行
pkill -CONT "^svscan$"