1. 介绍:
daemontools是一款unix服务管理软件,提供一组工具来进行管理用户的一系列进程.当某个进程因由于某种原因down掉之后, daemontools会自动拉起服务.
其中最核心的工具是supervise,它的功能是监控一个指定的服务,当该服务进程消亡,则重新启动该进程。而要添加让supervise监控的服务非常容易,只需要添加一个被监控的服务的目录,在该目录中添加启动服务器的名字为run的脚本文件即可。

2. 安装:

 

安装完成之后, 会创建两个目录,分别是/service /command.
注意:
被管理的进程不能以daemon形式运行,例如nginx.conf 必须关闭daemon, daemon off;
不要在/service/建任何目录, /service/只存放一些symbol link
只需要完成安装 / 配置两步即可
3. daemontools说明:
1). 只需要在/service/目录下添加一个文件夹,在此文件中创建run可执行文件, 并在run文件中设置自己想启动的服务就可以了,写好run服务之后,daemontools会自动发现并且启动起来.
daemontools 软件包包含 svscanboot, svscan, supervise, svc, svok, svstat, fghack, pgrphack, readproctitle, multilog, tai64n, tai64nlocal, setuidgid, envuidgid, envdir, softlimit和setlock。
svscanboot:svscanboot 是一个普通的脚本, 用来运行svscan,把输出定向到readproctitle。
svscan:svscan 检查服务目录,为每一个找到的脚本开始管理进程。
supervise:supervise运行 svscan给它的运行脚本,监听脚本开始的进程,当进程死亡的时候,使之重新运行。
svc:svc 发送信号到在supervise下运行的进程。
svok:svok 检查目录中运行的 supervise 。
svstat:svstat显示supervise监听到的进程的状态。
更多的详细描述,请参考http://cr.yp.to/daemontools.html。
2). 常用命令:
svscanboot 启动svscan进程
svscan 管理supervise,自动拉起服务
supervise 直接启动服务
svc 通过supervise间接管理服务
svstat 查看服务运行状态
svok 查看supervise运行状态
3). svc常用命令:
svc提供了一系列管理服务的功能,命令格式:svc 选项 服务
常用选项列表如下所示:
-u : 启动。如果服务没启动,则启动;如果服务停止了,则重启。
-d : 关闭服务。如果服务在运行,给它发TERM信号,然后发CONT信号。在服务停止后不重启它。
-o : 启动一次。启动服务,如果服务停了也不重启它。
-p : 暂停。给服务发送STOP信号。
-c : 继续。给服务发送CONT信号。
-h : 挂起。给服务发送HUP信号。
-a : 报警。发送ALRM信号。
-i : 中断。发送INT信号。
-t : 终止。TERM信号。
-k : 杀死。KILL信号。
-x : 退出。当服务挂掉后,supervise会立即退出。如果你在一个运行稳定的系统上用这个选项,那你很可能做错事了,因为supervise生来就是被设计成永远运行的: )。
4. daemontools延伸配置:
当你既然想到使用第三方工具来监控你的服务,保障服务可用性,那你肯定也会想到, 如果daemontools挂掉了,这个时候还怎么来保障服务可用性呢?
其实好奇的人可能会发现,你是无法kill掉svscanboot / svscan / supervise进程的,当你kill一次, 系统会再拉起一次.这是为什么呢?
答: 当你执行完 package/install时,系统会在/etc/inittab文件中在最后增加一行内容: SV:123456:respawn:/command/svscanboot;
建议:
将/etc/inittab中最后一行内容删掉, 自行加入到/etc/init/目录中进行统一管理. 将daemontools封装为一个服务.参考内容如下:

 

添加完之后,我们通过 initctl进行查看服务状态:
initctl list |grep daemontools ## 查看当前服务列表
initctl start daemontools ## 启动daemontools

5. daemontools增加redis服务:
在非/service目录下创建一个服务目录
eg: ## 注意: 以下操作需要自行部署redis服务在/usr/server/redis下

 

你会发现redis的进程号已经发生变更, 说明daemontools自动将其拉起. 至此配置已经完成