daemontools 守护进程

332 阅读2分钟

daemontools

    Daemontools是一个在linux上可以进行守护进程管理的工具,当程序需要常驻后台,万一挂掉他可以帮助重启服务.

软件包包含svscanbootsvscansupervisesvcsvoksvstatfghackpgrphackreadproctitlemultilogtai64ntai64nlocalsetuidgidenvuidgidenvdirsoftlimit和 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程序的功能,但是设置环境变量UIDUID 和 GID 帐号提供的UID和GID

envdir

envdir 在目录里运行利用环境变量提供的程序。

softlimit

softlimit 对指定程序允许资源限制。

setlock

setlock 锁住可执行程序的文件。

安装

wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

image.png

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脚本 image.png

ln -s ../init.d/daemontools S55daemontools

image.png

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 &