daemontools使用 September 08, 2016 / Unix LIKE / apacal / 2605 CLICK / 0 comment # daemontools使用 Daemontools是管理Unix服务的工具,它提供一组工具来管理一系列用户进程,当进程由于某些原因down掉之后,daemontools会自动重启进程。 #### 注意 1. 被管理的进程不能以daemon形式运行,例如nginx.conf 必须关闭daemon, daemon off; 2. 不要在/service/建任何目录, /service/只存放一些symbol link 3. 只需要完成安装 / 配置两步即可 ## 安装 ~~~ # ubuntu sudo apt-get install daemontools ~~~ 源码安装 ~~~ mkdir ~/tools cd /tools wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz tar xvzf daemontools-0.76.tar.gz cd admin/daemontools-0.76 package/install ~~~ 如果安装出现错误 ```/usr/bin/ld: errno: TLS defini tion in /lib/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o``` 将```admin/daemontools-0.76/src/error.h```中的```extern int errno;```替换为```#include ``` 安装完成之后,会创建```/service /command```两个目录 ## 启动daemontools daemontools是一组service管理工具,其中svscanboot工具用来启动svscan工具。可以通过以下命令启动svscanboot 开机启动需要在```/etc/rc.local```加入```/command/svscanboot &``` ~~~ sudo vim /etc/rc.local csh -cf '/command/svscanboot &' ~~~ 重启系统后,查看是否启动svscanboot,没有启动换成```/etc/init/svscan.conf```的开机启动方式[How to start daemontools](http://cr.yp.to/daemontools/start.html) 查看是否启动了 ~~~ ┌[apacal☮iZ23yw4p0blZ]-(~) └> ps -fe | grep svs root 782 1 0 14:29 ? 00:00:00 /bin/sh /command/svscanboot root 794 782 0 14:29 ? 00:00:00 svscan /service ~~~ ~~~ start on runlevel [12345] stop on runlevel [^12345] respawn exec /command/svscanboot ~~~ 将上面的内容写入```/etc/init/svscan.conf```中,重启系统。 ## 配置 启动svscanboot之后,相应的svscan进程也启动起来,其中参数```/service/```就是管理配置文件的目录 在自己约定的地方存放daemon启动的脚本文件夹,在软链到```/service/```下。如下所示,在```/data/daemon/grpc/```下创建```greeter```文件夹,下面有个```run```的脚本,表示该daemon的启动脚本 ~~~ ┌[apacal☮iZ23yw4p0blZ]-(/data/daemon) └> tree . └── grpc └── greeter ├── run └── supervise [error opening dir] 3 directories, 1 file ┌[apacal☮iZ23yw4p0blZ]-(/data/daemon) └> tree /service /service └── greeter -> /data/daemon/grpc/greeter 1 directory, 0 files ~~~ 创建完成后,greeter就被daemontool管理起来了,手动杀掉greeter进程又回被拉起来。 ~~~ ┌[apacal☮iZ23yw4p0blZ]-(/data/daemon) └> ps -ef | grep greeter root 30716 790 0 13:16 ? 00:00:00 supervise greeter root 30718 1 0 13:16 ? 00:00:00 /data/grpc/examples/cpp/helloworld/greeter_server ┌[apacal☮iZ23yw4p0blZ]-(/data/daemon) └> sudo kill -9 30718 ┌[apacal☮iZ23yw4p0blZ]-(/data/daemon) └> ps -ef | grep greeter root 30716 790 0 13:16 ? 00:00:00 supervise greeter root 30851 1 0 13:16 ? 00:00:00 /data/grpc/examples/cpp/helloworld/greeter_server ~~~ ## 常用命令 1. 启动被管理的进程 (配置完后无需执行svc命令) ~~~ svc -u /service/greeter/ (启动之后,如果greeter挂掉,daemontools会自动重启greeter) ~~~ 2. 关闭被管理的进程(不会关闭daemontools supervise进程) ~~~ svc -d /service/nginx/ ~~~ 3. 查看service状态 ~~~ svstat /service/nginx/ ~~~ 4. 移除service ~~~ rm /service/nginx #移除软连接 svc -dx /opt/svc/nginx/ ~~~ Continue reading