Upstartってなんだ?
先日、UbuntuをVMwareにインストールした時には特に気にしていませんでしたが、Fedora9のリリース記事をみてUpstartなるものが目に留まったので、ちょっと調べてみました。てかUbuntuのだと6.10の頃からUpstartが搭載されてたんですね。
initデーモンって?
全てのプロセスの親プロセス。psで確認するとPID=1。
/etc/inittabの設定に従って、/etc/rc*.d/のスクリプトを実行して、いろんなプロセスを立ち上げたりする。
結局、何が変わった?
- /etc/inittabがなくなった。
- ジョブの定義ファイル置き場は/etc/event.d/になった。
- システムのイベントを捉えてジョブを実行できる。
- そのうちcrondもこいつに置き換えられるらしい。
などなど。
とはいえ、まだまだ移行期でSysVinit互換に作成されているので、/etc/inittabがある場合はそちらが優先的に読み込まれるし、/etc/init.d/、/etc/rc*.d/のスクリプトも/etc/event.d/内の定義ファイルを通じて実行されているのねん。
/etc/inittabの代わりは
- /etc/event.d/rc-default
# rc - runlevel compatibility # # This task guesses what the "default runlevel" should be and starts the # appropriate script. start on stopped rcS script runlevel --reboot || true if grep -q -w -- "-s\|single\|S" /proc/cmdline; then telinit S elif [ -r /etc/inittab ]; then RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)" if [ -n "$RL" ]; then telinit $RL else telinit 2 fi else telinit 2 fi end script
デフォルトのランレベルを変更したい時は、このファイルを編集する。Ubuntuはデフォルトのランレベル2に設定されているので、elseの後のtelinitの引数を書き換えれば、起動時のランレベルを変更できる。
先に、/etc/inittabを読みに行ってるね。
ジョブ定義ファイルを作ってみる
- /etc/event.d/rails_sample
# rails sample application with mongrel start on runlevel 2 start on runlevel 3 start on runlevel 4 start on runlevel 5 exec mongrel_rails start -d -c /railsapps/sample
サンプルなのでmongrelのオプションだとかの話はおいといて、やってる事はとてもシンプル。
- start on
- ジョブを起動させるランレベルを指定。(runlevel以外にも色々指定できる。)
- exec
- 実行するサービスを指定。
その他にも
- pre-start script 〜 end script
- post-stop script 〜 end script
- console
- respawn
- その他もろもろ
などなど指定できるキーワードは色々あるようですが、そのへんは参考文献を。
こんな感じで割とシンプルな記述でいろいろな事が出来るようです。イベントもいろんな指定の仕方が出来るようだし、cron代わりに使用する方法なんかも、もうちょっと調べてみたいと思う次第です。