web-dev-qa-db-ja.com

/etc/init.dのLinuxブート順序を理解する

この質問はDebianに関するものですが、多くのLinux環境でも同じだと思います。

/etc/init.dディレクトリは、ブート時に実行されるサービスを定義します。私が見ると、誰がいつ実行するかを定義する2つのメカニズムがあります。

  • ランレベルディレクトリ-/etc/rcN.d/ディレクトリ。init.d内のスクリプトへのシンボリックリンクがあり、実行順序を定義する番号が付いています。これらのシンボリックリンクは、実行中のupdate-rc.dから生成されます。
  • insservファイル-ユーティリティinsservから生成された.depend.start/stop/bootファイル。これらのファイルでは、TARGETSの下に実行中のスクリプトがあり、それらが表示される順序は実行中の順序です( this post を参照)。

だから最初の質問-これらのどれが起動順序を決定しますか?


ブート順序を変更するには、rc.Nディレクトリのシンボリックリンク名を編集するか、.depend.startの出現順序を変更することができると思います。ただし、これらの変更はどちらもinsservまたはupdate-rc.dの呼び出しによって上書きされます。

では、2番目の質問-insservまたはupdate-rc.dの呼び出し後に続くように、起動順序のinit.dスクリプトをどのように制御しますか?

5
Nitay

sysvinit(systemdは異なりますが、そこではinitscriptsではなくユニットを使用します)では、ブート順序は/etc/rc?.d内のファイルの順序によってブート中に決定されます。そこのシンボリックリンクはupdate-rc.dによってinsservの助けを借りて生成されます。これは実際には実装の詳細です(.depend.bootなどのファイルも同様です)。 LSBヘッダーで宣言されているinitscript間の依存関係だけに注意する必要があります。 例:

### BEGIN INIT INFO
# Provides:          unbound
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

起動順序を変更する場合は、関連するinitscriptに依存関係を追加する必要があります。これを行う最も安全な方法は、上書きを/etc/insserv/overridesに追加することです。上書きするスクリプトと同じ名前で新しいファイルを作成し、そのファイルに新しいヘッダーを書き込みます。次に、update-rc.d yourscript defaultsを実行して、シンボリックリンクを再計算します。

詳細については、 insserv および update-rc.d のマンページを参照してください。

4
Stephen Kitt