Quantcast
Viewing all articles
Browse latest Browse all 2722

daemontoolsの設定を自動で設定するシェルスクリプト(備忘録)

前提条件

  • daemontoolsが使えるようになっていること

以上(笑)

シェルスクリプト作成

以下のシェルスクリプトをPATHが通っているところに置いて、実行のパーミッションを付けます。
この記事では「daemonctl」という名前で作成したとして説明します。

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用のツールで同名の、光学メディアマウントツールがありますので、上手くググってください。


Viewing all articles
Browse latest Browse all 2722

Trending Articles