前言
为什么要讲一个如此”古老”的守护工具?为什么不用supervisord?
supervisord
有个问题疼死我了。一远程管理一下它守护下的进程,CPU就会100%。这个问题年久失修。
它的supervisorctl里的指令,常reload一下会让所有的服务死了,自己也死了!也不重启,得手动重启。
更让人揪心的是,当业务负载繁重时,这个工具就成了”仙人掌”,碰不得,前段时间发现一次半夜里无端地持续了2个多小时把CPU提到了100%。
用了它可让阿里云破费了不少短信费。天天有警告!
不得已再花些时间学习了一下其它的守护工具了。这个daemontools偏老,看上去更稳妥。
以下实操基于FreeBSD11(Linux有systend,守护嘎嘎的!)
介绍
Daemontools是管理Unix服务的工具,它提供一组工具来管理一系列用户进程,当进程由于某些原因down掉之后,daemontools会自动重启进程
注意
- 被管理的进程不能以daemon形式运行,例如nginx.conf 必须关闭daemon, daemon off;
- 不要在/var/service/建任何目录, /var/service/只存放一些symbol link
- 只需要完成安装 、 配置两步即可
安装启动
1 | pkg install daemontools |
启动成功多出了2个进程:
1 | root 7616 0.0 0.1 8344 1676 - S 10:28 0:00.04 /usr/local/bin/svscan /var/service |
svscan
启动后监视/var/service
目录,当这里有服务的软连接时,svscan会为每个服务主恸一个supervise
服务。supervise
执行服务目录下的run
,如果服务目录下还有down
文件存在,就不会自动启动,需人工手动启动此服务。
supervise
的状态信息以2进制的形式存放在服务目录的supervise
下面,并且提供了下面的工具来操作:
- svstat: 读取状态信息
- svc: 启动/停止/挂起等
- svok: 检查是否运行成功
- svscan:可靠的启动/var/service目录下的服务。如果某个服务加入后,没有启动,可以调用此命令,强制启动。
添加服务
普通添加
先创建一个测试用的需要被守护的项目。放到:/var/server/testprocess/
1 | root@freebsd:/var/server/testprocess # ll |
然后在/var/service
目录下建立软链接
1 | root@freebsd:/var/server/testprocess # ln -s /var/server/testprocess /var/service/testprocess |
这个时候可以检查一下服务是否正在运行:
1 | root 7618 0.0 0.1 6252 1632 - I 10:28 0:00.00 supervise testprocess |
上面这种方式的坏处是必须以root用户运行,如果想以其他用户运行,则需要做如下改进,假设用户为bluse,id为1001:
以指定用户身份运行
改进一下run的执行方式:
1 | root@freebsd:/var/server/testprocess # cat run |
就可以了
管理服务
使用svstat来查看服务
1 | root@freebsd:/var/server/testprocess # svstat /var/server/testprocess/ |
使用svc来管理服务
1 | NAME |
daemontools 中的其它工具
log工具:
- The readproctitle program
- The multilog program
- The tai64n program
- The tai64nlocal program
环境工具:
- The setuidgid program
- The envuidgid program
- The envdir program
- The softlimit program
- The setlock program
- 本文标题:daemontools系列小工具
- 本文作者:jf wang
- 创建时间:2017-06-17 14:17:12
- 本文链接:https://www.wangjunfeng.com.cn/2017/06/17/daemontools/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!