Ubuntu server 10.10 自動起動に失敗する

Ubuntu 10.10 Server版でnamed, apache2の自動起動に失敗していました。自動起動はしないのですが、OS起動後に手動で起動すると問題無く起動する。

例えば手動で

# /etc/init.d/named start

とか

# service named start

とコマンドを打って起動する分には、全然問題無く起動します。今まで通り /etc/init.dに起動スクリプトを置いて、/etc/rc2.dの下にシンボリックリンクを張った状態です。この状態なので起動スクリプトの書き方に問題があるわけではないという事までは判っていました。

気になったのが

# runlevel

のレスポンスが

unknown

になる事。でも、inittabが無い(^^; (※BSD好きですが、SVR4育ちなのでまずそこを見ようとするクセが・・・) 何処でランレベルの設定してるの?って状態だったのですが、どうやらUpstartの起動時に /etc/init/rcS.conf→/etc/init/rc-sysinit.confと読んで(※実際にはイベント駆動っぽい動作らしく、スクリプトが次のスクリプトをキックしているわけではないようです。サーバ用とでは起動時間を削減してくれるよりは、起動プロセスを追っかけやすくしてくれてるほうがありがたいのですが。)  rc-sysinit.confの中で

env DEFAULT_RUNLEVEL=2

と設定しているようなのです。で、最後に

telinit "${DEFAULT_RUNLEVEL}"

とランレベルを2に移行していました。

ここまで調べて やっとrc-sysinit.confが動いていない事が判りました。

あとは rc-sysinit.confの中で、start onの条件が

start on filesystem and net-device-up IFACE=lo

と書かれていたのですが、その部分がNGだったようで

start on filesystem and started networking

と書き換えることで、rc-sysinit.confが正しく動くようになりました。

# runlevel

のレスポンスが

N 2

となっており、ランレベル2になっていることが確認できました。

この結果、rc-sysinit.conf → telinit 2 → /etc/init.d/rc 2 → /etc/rc2.d/S* という順序で従来の /etc/rc2.d/S*のファイルが起動されるようになりました。

いつの間にかUbuntuの起動スクリプトもSysVinitからUpstartへの移行が進んでいて起動スクリプトのキックされかたが全然別物になってました(^^;

それにしてもUbuntuのUpstart関連のドキュメントって探してもなかなか見つからず、調べるのに難儀しました。もっとドキュメント整備されると良いのですが・・・。