deamontoolsは、qmailを作った作者と同じため、管理方法が独自の仕組みとなっている。特にフォルだ構成については、トップレベルにフォルダを作成することから毛嫌いをする人も多いと思うが(私もその一人だが)非常にシンプル故に安定感もある便利なルールである。
提供される機能は、コマンドをプロセスとして登録することで、不慮の事態によるプログラム停止を監視し、再起動をかけてくれるものと考えればよい。
[公式ページ:http://cr.yp.to/daemontools/install.html]
# mkdir -p /package # cd /package # wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz (curl -O でもOK) # tar xvpfz daemontools-0.76.tar.gz # cd admin/daemontools-0.76 # ./package/install
インストールが完了すると、以下の2つのディレクトリが作成され、/command は自動的に path に追加される。
/service /command
/service フォルダの直下に作成するフォルダ名が登録サービス名となる。その中に作成する run スクリプトがアプリケーションの起動スクリプトとなる。
<runファイルの例>
#!/bin/sh /usr/local/bin/node /var/www/node/app.js 2>&1 >> node.log
下記のスクリプトは自分で使いやすい位置に、分かりやすい名前で置いておくと便利だろう。
#!/bin/sh svc -u /service/node
#!/bin/sh svc -d /service/node
#!/bin/sh svstat /service/node ps axu| grep node lsof -i:8080
name=`dirname $1 | xargs -0 basename` # When/if we want to use last folder name as project name cd `dirname $1`
pidfile=/var/run/$name.pid
if [ -f "$pidfile" ]; then
pid=`cat $pidfile` running=`ps p $pid |wc -l` if [ $running -eq 1 ]; then pid= fi
else
pid=
fi
case $2 in
start) if [ "$pid" = "" ]; then nohup /usr/local/bin/node $1.js $1.conf 2>&1 1>>/var/log/$name & echo $! > $pidfile fi $0 $1 status ;; stop) if [ "$pid" = "" ]; then echo Not running else echo Stopping $name kill $pid fi ;; restart) $0 $1 stop $0 $1 start ;; status) if [ "$pid" = "" ]; then echo Stopped else echo Running with PID $pid fi ;; *) echo $1 "stop|start|restart|status" ;;
esac