前提条件
- daemontoolsが使えるようになっていること
以上(笑)
シェルスクリプト作成
以下のシェルスクリプトをPATHが通っているところに置いて、実行のパーミッションを付けます。
この記事では「daemonctl」という名前で作成したとして説明します。
#!/bin/shCWD=`pwd-P`SERVICE=`pwd | awk-F"/"'{print $NF}'`OPT=$1SCRIPT=$2if[-z$OPT];then
echo"Usage: $0 [option]"echo" start: start service."echo" stop: stop service."echo"restart: restart service."exit
fi
if["$OPT"!="stop"];then
if[!-f"$SCRIPT"];then
START="$CWD/start.sh"else
START=$SCRIPTfi
if[!-f"$START"];then
echo"require start.sh script."exit
fi
fi
if[!-L"/etc/service/$SERVICE"];then
mkdir-p$CWD/service/$SERVICEcat<<EOF> $CWD/service/$SERVICE/run
#!/bin/sh
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
cd $CWD
exec $STARTEOF
chmod 755 $CWD/service/$SERVICE/run
fi
if["${OPT}"="start"];then
if[!-L /etc/service/$SERVICE];then
ln-s$CWD/service/$SERVICE /etc/service/
fi
svc -u /etc/service/$SERVICE> /dev/null 2>&1
elif["${OPT}"="stop"]&&[-L /etc/service/$SERVICE];then
svc -d /etc/service/$SERVICE> /dev/null 2>&1
rm-rf /etc/service/$SERVICEPID=`ps ax | grep"supervise $SERVICE" | grep-v'grep' | awk'{print$1}'`kill-9$PIDelif["${OPT}"="restart"];then
svc -d /etc/service/$SERVICE> /dev/null 2>&1 && svc -u /etc/service/$SERVICE> /dev/null 2>&1
fi
パーミッションは、
$ chmod 755 daemonctl
みたいな感じで付けてください。
スクリプト解説
とりあえずはdaemontoolsで監視したいツールのディレクトリに入ります。
ディレクトリが無い場合は、適当な場所にディレクトリを作って入ります。
そこに「start.sh」という名前で、ツールの起動スクリプトを書きます。
「exec」で起動するようにしないと上手くdaemontoolsで監視してくれないっぽい。
起動スクリプトが作成出来たら、以下のような感じで実行します。
$ daemonctl start
すると、カレントディレクトリにある「start.sh」を起動スクリプトとしてdaemontoolsがツールを起動し、プロセス監視を開始します。
実行すると「[カレントディレクトリ]/service/[カレントディレクトリ名]」というディレクトリが作成されているはず。
例)
カレントディレクトリが「minecraft」だった場合、「./service/minecraft」というディレクトリが作成されているはず。
これが、daemontoolsが監視するために使用するディレクトリ。
通常はエディタなどで中にある「run」というファイルを記述して「/etc/service」配下にシンボリックリンクを貼ったりしないといけなかったが、それをシェルスクリプトで実行するようにしてあります。
実行してエラーなどが出なかった場合に、
$ ps ax | grep minecraft
などとプロセスを確認してみると、superviseと、起動されたツールの2つが出てくると思います。
ここで、
$ daemonctl stop
と実行すると、ツールが停止し、daemontoolsの監視が止まります。
プロセスで確認すると、先程の2つのプロセスがなくなっているのが確認出来るはず。
$ daemonctl start [起動スクリプトのPATH]
とやると、「start.sh」以外の起動スクリプトを指定することも出来ます。
daemontoolsってなに?
という人はググってください。
Windows用のツールで同名の、光学メディアマウントツールがありますので、上手くググってください。