dovecotをeth0:1、eth0:2等のサブインターフェースを使い動作させているのだけど、自動起動に失敗していた。 インターフェースの初期化よりも先にdovecotが起動されるらしく、エラーログ(/var/log/mail.err)に次のようなエラーが記録されていた。
Mar 22 20:23:30 hostname dovecot: bind(192.168.110.1, 143) failed: Cannot assign requested address
この場合の対処は簡単でstart onの条件にサブインターフェースのインターフェースアップを記述する事で収まった。start on filesystem and net-device-up IFACE=eth0:1
通常のSysVInitを採用するUNIXならば、例えばS01networkでNICの初期化、インターフェースのアップが行われているのであれば、S90dovecotとか01→90と記述する事で簡単に起動順序を変更する事が出来るのだが、Upstartを採用しているUbuntu10.10ではstart onの条件としてデーモン起動時に事前に必要になる項目を書く必要があるという事になる。正直Upstartの方法はちょっと面倒臭いので、多分互換性維持の為に残されていると思われるrc.d(/etc/init/rcで起動される)に起動スクリプトを置いたほうが分かりやすいかも知れない。Ubuntu Desktop版のようにクライアント用途で、利用者が起動スクリプトを配置することが無いのであれば、起動時間の短縮やホットプラグデバイスの利用を考えてUpstartを採用した方が良いと思われるのだが。
正直、SystemV系UNIXの /etc/rc*.d/に/etc/init.d/*へのシンボリックリンクを張って自動起動を制御するとか、RedHat系のchkconfigで自動起動のOn/Offが簡単に行える環境、BSD系のrc.localとかにNAMED=ONとか書くだけの簡単なやりかたに馴れすぎていてSolaris10のsvcadmやUbuntuのUpstart、MacOSXのLaunchchtなんか面倒で仕方無いのだけれど。
コメント