前提条件
- daemontoolsが使えるようになっていること
以上(笑)
シェルスクリプト作成
以下のシェルスクリプトをPATHが通っているところに置いて、実行のパーミッションを付けます。
この記事では「daemonctl」という名前で作成したとして説明します。
#!/bin/sh
# Current working directory
CWD=`pwd -P`
SERVICE=`pwd | awk -F"/" '{print $NF}'`
# Options
OPT=$1
SCRIPT=$2
# Display help
if [ -z $OPT ]; then
echo "Usage: "`echo $0 | awk -F"/" '{print $NF}'`" [option]"
echo " start: start service."
echo " stop: stop service."
echo "restart: restart service."
exit
fi
# When in stop mode, if there was no service directory.
if [ "$OPT" != "stop" ]; then
if [ ! -f "$SCRIPT" ]; then
START="$CWD/start.sh"
else
START=$SCRIPT
fi
if [ ! -f "$START" ]; then
echo "require start.sh script."
exit
fi
fi
if [ ! -d "$CWD/service/$SERVICE" ]; then
mkdir -p $CWD/service/$SERVICE
cat << EOF > $CWD/service/$SERVICE/run
#!/bin/sh
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
cd $CWD
exec $START
EOF
chmod 755 $CWD/service/$SERVICE/run
fi
#=============================================================================
# Start daemon
#=============================================================================
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
echo "Start daemon service [$SERVICE]."
#=============================================================================
# Stop daemon
#=============================================================================
elif [ "${OPT}" = "stop" ] && [ -L /etc/service/$SERVICE ]; then
svc -d /etc/service/$SERVICE > /dev/null 2>&1
rm -rf /etc/service/$SERVICE
PID=`ps ax | grep "supervise $SERVICE" | grep -v 'grep' | awk '{print$1}'`
kill -9 $PID
echo "Stop daemon service [$SERVICE]."
#=============================================================================
# Restart daemon
#=============================================================================
elif [ "${OPT}" = "restart" ]; then
svc -d /etc/service/$SERVICE > /dev/null 2>&1 && svc -u /etc/service/$SERVICE > /dev/null 2>&1
echo "Restart daemon service [$SERVICE]."
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用のツールで同名の、光学メディアマウントツールがありますので、上手くググってください。