Daemontools是管理Unix服務的工具,它提供一組工具來管理一系列用戶進程,當進程由於某些原因down掉之後,daemontools會自動重啟進程
注意
被管理的進程不能以daemon形式運行,例如nginx.conf 必須關閉daemon, daemon off;
不要在/service/建任何目錄, /service/只存放一些symbol link
只需要完成安裝 / 配置兩步即可
安裝
$ 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 <errno.h>
安裝完成之後,會創建 /service /command兩個目錄
啟動daemontools
daemontools是一組service管理工具,其中svscanboot工具用來啟動svscan工具。可以通過以下命令啟動svscanboot
# /command/svscanboot &
也可以設置開機啟動,具體參考
啟動之後,查看進程,可以發現svscan做為svscanboot的子進程在運行
# ps -ef|grep svs root 9134 9072 0 04:05 pts/2 00:00:00 /bin/sh /command/svscanbootroot 9136 9134 0 04:05 pts/2 00:00:00 svscan /service
配置
啟動svscanboot之後,相應的svscan進程也啟動起來,其中參數/service/ 就是管理配置文件的目錄
創建services目錄,例如
# mkdir -p /opt/svc/{nginx, tornado}
在services目錄創建run腳本(名字必須是run而且權限是755),例如nginx目錄
#touch /opt/svc/nginx/run && chmod 755 /opt/svc/nginx/run#cat /opt/svc/nginx/run#!/bin/shexec /home/vagrant/nginx/sbin/nginx #啟動進程命令
創建symbol link, 創建完後daemontools會自動啟動nginx進程
#ln -s /opt/svc/nginx/ /service/ #ln -s /opt/svc/tornado/ /service/ # pstree -a -p 9134svscanboot,9134 /command/svscanboot |-readproctitle,9137 service errors:... `-svscan,913 6 /service |-supervise,9138 nginx | `-nginx,913 9 | `-nginx,9140 `-supervise,9164 tornado `-python,9165 /home/vagrant/tornado/main.py
從中可以看出來,svscanboot負責啟動svscan服務,svscan管理supervise進程。而具體的客戶進程,是通過supervise進程來統一管理的
現在nginx和tornado都被daemontool管理起來了,試試看殺掉tornado應用進程看看
root@precise32:/service# kill 9165root@precise32:/service# !psps -ef|grep torroot 9164 9136 0 04:06 pts/2 00:00:00 supervise tornadoroot 9181 9164 2 04:09 pts/2 00:00:00 python /home/vagrant/tornado/main.py
可以看到,雖然手動kill掉了tornado應用,但是daemontool自動將應用重新啟動起來了
常用命令
啟動被管理的進程 (配置完後無需執行svc命令)
svc -u /service/nginx/ (啟動之後,如果nginx掛掉,daemontools會自動重啟nginx)
關閉被管理的進程(不會關閉daemontools supervise進程)
svc -d /service/nginx/
查看service狀態
svstat /service/nginx/
移除service
rm /service/nginx #移除軟連接 svc -dx /opt/svc/nginx/
多嘴
問:咦,如果daemontools的進程掛掉了,該怎麼辦??
答:自個兒看文檔,然後手動殺掉 svscanboot / svscan / supervisor 進程看看?
以上內容來自http://linbo.github.io/2013/02/24/daemontools
在CentOS 7上還需要進行些許改動,方法如下:
Cut’n’paste fromhttp://www.productionmonkeys.net/guides/qmail-server/daemontools
CentOS 7 uses systemd
Create a new file /etc/systemd/system/daemontools.service, with the startup code in it:
新建一個文件 /etc/systemd/system/daemontools.service, 內容如下:
[Unit]Description=daemontools Start superviseAfter=getty.target[Service]Type=simpleUser=rootGroup=rootRestart=alwaysExecStart=/command/svscanboot /dev/ttyS0TimeoutSec=0[Install]WantedBy=multi-user.target
systemctl start daemontools.service
systemctl status daemontools.service
systemctl enable daemontools.service
http://xxxxxx/Linuxjc/1184808.html TechArticle