脚本下载

下载: http://www.jianingy.com/downloads/code/utils/kill-service

daemontools对服务的控制

通过 strace(1) daemontools的一些程序(svscan, svc, …), 可以简单了解daemontools对服务的控制方法。

svscan 该进程会扫描(每5秒)/service目录,以确保每个对应的目录都有一个supervise来监控。
supervise 该进程负责管理每个服务的运行。svc就是是通过与该进程的通信来控制对应服务的。

服务的删除方法

基于以上认知,删除一个daemontools启动的服务需要的步骤如下:

  1. 向svscan发送SIGSTOP信号,暂停svscan对/service的扫描。

    pkill -STOP "^svscan$"
    
    Note 这一步是为了防止当我们杀掉supervise时,svscan又会重新启动新的supervise。
  2. 如果服务有log,先杀掉log的supervise进程

    fuser -k /service/$SERVICE_NAME/log
    
  3. 杀掉服务的supervise进程

    fuser -k /service/$SERVICE_NAME
    
  4. 删除supervise目录

    rm /service/$SERVICE_NAME/{log/supervise,supervise}
    
    Note 由于一些服务的目录可能是symbolic link, 删除服务的目录并不会删除其下的supervise目录。因此这里先删除之。
  5. 删除服务对应的目录

    rm /service/$SERVICE_NAME
    
  6. 恢复svscan进程的运行

    pkill -CONT "^svscan$"
    
|