Upstartを使ってイベントに応じてジョブを起動/停止させてみる

SysVinitのようなinitデーモンの代替となるUpstart
書いてみたら凄く簡単だった。
initデーモンスクリプトは書くの面倒だもんね。。

Upstartの基本的な書き方は、
ハートビーツさんの、「Upstart を使ってお手軽 daemon 化」の記事を参照するといい。
http://heartbeats.jp/hbblog/2013/02/upstart-daemon.html

この記事では、Upstartの特徴である、"イベント"に応じてジョブを実行/停止 を紹介したいと思う。
まず簡単な例で、runlevelの変更によって実行/停止をしたい場合以下のようになる。

$ cat /etc/init/apache.conf
start on runlevel [2345]
stop on runlevel [016]
respawn

exec  /usr/local/apache/bin/httpd -DFOREGROUND

これをたとえば"app"というジョブが起動/停止したらapacheも起動/停止するようにしたい場合は以下のようになる。

$ cat /etc/init/app.conf
start on runlevel [2345]
stop on runlevel [016]

$ cat /etc/init/apache.conf
start on starting app
stop on stopped app
respawn

exec  /usr/local/apache/bin/httpd -DFOREGROUND

こうすることで、

$ sudo initctl start app

apacheも起動する。
appにいろいろなジョブを紐付けておけば、
appジョブを起動/停止するだけで紐づくジョブも起動/停止してくれるので楽になる。


イベントのよって起動/停止したい場合は、書式は以下になる。

start on イベント ジョブ名
stop on イベント ジョブ名

イベントには以下の様な種類がある。

イベント 説明
starting ジョブの起動が開始した時に発生
started ジョブの起動が完了した時に発生
stopping ジョブの停止が開始した時に発生
stopped ジョブの停止が完了した時に発生

あるジョブの起動が完了してから起動した場合は、startedを選択するとよい。


ちなみに、

start on (イベント ジョブ名 or イベント ジョブ名)
stop on (イベント ジョブ名 or イベント ジョブ名)

のような書き方や

start on (イベント ジョブ名 and イベント ジョブ名)
stop on (イベント ジョブ名 and イベント ジョブ名)

のような書き方もできる。

もっとUpstartに関して知りたい場合は、以下のサイトを見るとよいと思う。
http://upstart.ubuntu.com/cookbook/

※console logとかsetuidとかを使いたかったけど、
CentOS6.3に入っているUpstartのバージョン0.6.5と凄く古かったので試せなかった…。