daemontools & supervisevim
daemontools工具
概念:daemontools是用来监控进程的工具。 安装daemontools: # 下载包 wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz # 解压 tar -zxvf daemontools-0.76.tar.gz # 编译。 注意:安装过程当中须要建立/service和/command目录,故须要root权限。 cd admin/daemontools-0.76 sudo package/install # 此时会报错 "/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o" # 解决:在 src/conf-cc 第一行的最后加上" -include /usr/include/errno.h" 后,从新执行 package/install 便可。 启动daemontools: /command/svscanboot & # 说明: 经过"ls /command/"能够看到daemontools下的命令,svscanboot启动以后会启动svscan,svscan启动后会启动supervise。 svscan每隔5s会去检查/service目录,若是有新的服务,则启动新的supervise;若是有supervise意外退出会重启supervise(注:若supervise是正常退出的,则不会重启)。 验证: ps aux | grep svscan # 若查询到以下进程,则表示启动成功。 /bin/sh /command/svscanboot svscan /service daemontools中的supervise命令: 概念:supervise命令用来监控指定的进程,当监控的进程挂掉后,supervise会自动重启该进程。 格式:supervise xxxx/xxxService # xxxx/xxxService是一个目录,supervise会监控这个目录,该目录下必须包含名称为run的文件。 使用: 第一步:建立服务目录,准备run文件 举例:建立服务目录:/home/work/jxn-test/agent ,将要监控的进程的启动命令须要放到run文件中: vim /home/work/jxn-test/agent/run #!/bin/sh sh realCmd.sh # 注意: # 1>服务的启动命令,不能是nohup启动的,由于nohup执行的太快了,最后致使nohup正常结束后,supervise认为nohup进程挂掉了,故会不断地去运行run。 # 2>必须在run脚本的开头写上 #!/bin/sh ,不然报错:supervise: fatal: unable to start /home/work/jxn/my-service/run: exec format error # 给run文件添加执行权限 chmod 755 run # 创建连接,方便管理和查看。 ln -sf /home/work/jxn-test/agent /service/ 第二步:启动监控 启动监控:svc -u /home/work/jxn-test/agent (或:svc -u /service/agent) 关闭监控:svc -d /home/work/jxn-test/agent 关闭监控而且中止服务:svc -dk /home/work/jxn-test/agent 说明:svc命令是用来控制那些被supervise监控的服务的。svc是间接控制服务的,它其实是经过控制supervise来控制服务。 格式:svc 参数 xxxx/xxxService 参数: -u up,启动对该服务的监控。 注:也能够直接使用supervise命令来启动监控:nohup supervise /home/work/jxn-test/agent > svsrun.log 2>&1 & -d down,中止对该服务的监控,即中止supervise对该服务的监控。 注:服务不会所以而关闭,若咱们要关闭服务,则使用-k参数或手动kill掉服务。 -o once,若是该服务没有运行,则启动该服务,以后若该服务挂掉了,supervise也不会再去启动该服务了。 -k kill,给服务发送一个KILL信号。 -x exit,中止对该服务的监控,而且中止该服务的supervise进程,该服务对应的supervise进程中止后,咱们就没法使用svc命令了。 注意:咱们通常不会使用该参数!若是服务对应的supervise进程被停掉(svc -x 服务目录)或被kill掉,则咱们可使用"nohup supervise 服务目录 & "来从新启动该服务对应的supervise进程。 查看服务的状态:svstat xxxx/xxxService 常见问题: 问题:若不当心将服务目录下的supervise目录删除后,会致使没法使用svc命令: svc -u /home/work/jxn-test/agent 提示:svc: warning: unable to control /home/work/jxn-test/agent: file does not exist svstat /home/work/jxn-test/agent 提示:/home/work/jxn-test/agent: unable to open supervise/ok: file does not exist 解决: 先kill掉该服务以前的supervise进程:ps aux | grep "supervise /home/work/jxn-test/agent" | grep -v grep | awk '{print $2}' | xargs kill -9 而后直接使用nohup supervise /home/work/jxn-test/agent > svsrun.log 2>&1 & 启动,而后会自动生成supervise目录,咱们就可使用svc命令了。