DebianのDependency Based Bootとは
前から使っていたTomcatの起動スクリプトをDebian 6.0(Squeeze)に作成し、update-rc.dを使って自動起動させようと思ったら警告が表示されました。
どうやらDebian 6.0から「update-rc.d」ではなく「insserv」を使う作法に変わったようです。
何が変わっているのか気になったので、
http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot
ここの冒頭をざっくり翻訳してみました。
Dependency based boot sequence - 依存関係ベースのブートシーケンス
Debianは、各々のinit.dスクリプトのヘッダーに記載されているLSB fields(*1)を参照し、
サービスの起動順序を制御する仕様を満たしています。
この機能は、前からある起動順序を制御する不具合を解消し、簡単に正しい起動順序を保つことができます。
(*1)LSB fields
LSBとはLinux Standard Base
http://e-words.jp/w/LSB-2.html
init.dスクリプトのヘッダに記載する、以下の内容のことだと思います。
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
Advantages - 利点
「Z」というinit.dスクリプトの実行と、「X」というinit.dスクリプトの実行の間に「Y」というinit.dスクリプトを
実行させたい場合、もし、「Z」や「Y」がブートシーケンスの番号に20(または20Xや20Z)という番号を使用していたら
どうすればよいでしょうか?
ブートシーケンスの番号を20Yとしても、先に「X」が起動してしまうため、狙いどおりの動きになりません。
この問題を解決するには、「X」や「Z」のパッケージのメンテナに相談して、
20Z、29XのようなXとZが異なるブートシーケンス番号を使用するように変更する必要があります。
依存関係ベースのブートシーケンスを使用することで、各パッケージのメンテナがそのスクリプトの依存関係を指定し、
依存関係解決するために番号の割り当てを残すようにすることもできます。
How to add a service when using dependency-based booting - 依存関係ベースのサービスの追加法
Debian 6.0以前は「update-rc.d」を使用してサービスを追加していました。
update-rc.d mydaemon defaults
Debian 6.0から、依存関係ベースのサービスを追加するには「update-rc.d」の代わりに「insserv」を使用します。
insserv mydaemon
「mydaemon」は/etc/init.d/にある実行可能なスクリプトです。
insservコマンドは正常終了した場合、なにも出力しません。
新旧どちらの記載方法のスクリプトも、/etc/init.dに配置します。
依存関係ベースの起動スクリプトの場合、スクリプトの記載内容は LSB init scriptに準拠する必要があります。
History of the feature - 経緯
2002年のdebconfから問題提起されており、Debian 6.0(Squeeze)からデフォルトの起動制御機構として
導入されたようです。
今後は、LSBInitScriptsという仕様にしたがってinit.dスクリプトをしなくてはなりません。
http://wiki.debian.org/LSBInitScripts
正直、真面目に起動スクリプトの書き方を学んだことがないです。
よい機会なので、今度LSBInitScriptsについて調べてみようと思います。
コメント