daemontools
Daemontools是一个在linux上可以进行守护进程管理的工具,当程序需要常驻后台,万一挂掉他可以帮助重启服务.
软件包包含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监听到的进程的状态。
fghack
fghack 防止进程把自己放到后台运行。
pgrphack
pgrphack 在单独的进程组里开启一个进程。
readproctitle
readproctitle 显示ps输出的log文件。
multilog
multilog 是登陆程序。它从daemon获得输出,添加到log文档里。
tai64n
tai64n 是一个timestamp生成程序。
tai64nlocal
tai64nlocal 改变 tai64n 输出文件到可读的格式。
setuidgid
setuidgid 在指定的帐号下运行一个特定的程序。
envuidgid
envuidgid 完成setuidgid程序的功能,但是设置环境变量GID 帐号提供的UID和GID
envdir
envdir 在目录里运行利用环境变量提供的程序。
softlimit
softlimit 对指定程序允许资源限制。
setlock
setlock 锁住可执行程序的文件。
安装
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
vim src/conf-cc
gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -include /usr/include/errno.h
./package/install
开机自启方法
1)/etc/rc.d/rc3.d
/etc/init.d 创建 daemontools脚本
ln -s ../init.d/daemontools S55daemontools
2)/etc/rc.d/init.d
chkconfig daemontools on
# daemontools 脚本
#!/bin/bash
#
# chkconfig: - 55 45
# description: svscanboot
# probe: false
ulimit -Hn 655350
ulimit -Sn 655350
set -e
daest=`ps -ef |grep svscan | grep -v grep | wc -l`
case "$1" in
start)
if [ $daest == '0' -a -x /usr/local/bin/svscanboot ];then
/usr/local/bin/svscanboot &
else
echo 'svscanboot already start'
fi
;;
stop)
if [ $daest -ne '0' ];then
killall svscanboot
killall svscan
echo 'svscanboot stop'
else
echo 'svscanboot already stop'
fi
;;
status)
[ "$daest" -ne '0' ] && echo 'svscanboot starting' || echo 'svscanboot stop'
;;
stop|reload|restart|force-reload|status)
;;
*)
echo "Usage: service {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0
进程监控
svscan会为/service目录下所有服务启动supervise进程。svscan会为每个服务启动一对supervise服务:一个s子目录(即服务进程的工程目录),其实是个软连接;一个是s子目录下的log目录(如果有的话)。supervise会执行s子目录下的run脚本,并监听run脚本启动的进程,同时会启动s/log目录下的run脚本。
在 /opt/下创建testserver目录,并创建run脚本,创建软连接ln -s /opt/testserver /service/testserver
#run 测试脚本
#!/bin/bash
/usr/bin/python -m SimpleHTTPServer 80 &