/etc/init.dでのLinux起動順序の理解

/etc/init.dでのLinux起動順序の理解

Debianに関する質問ですが、多くのLinux環境でも同じようです。

この/etc/init.dディレクトリは、起動時に実行されるサービスを定義します。誰がいつ走るかを定義する2つのメカニズムがあるようです。

  • 実行レベルディレクトリ -/etc/rcN.d/ディレクトリにはスクリプトへのシンボリックリンクがあり、init.dその中の数字はスクリプトが実行される順序を定義します。これらのシンボリックリンクはを実行して作成されますupdate-rc.d
  • insservファイル -.depend.start/stop/bootこのユーティリティによって生成されたファイルinsserv。このファイルにTARGETS表示される順序で実行されているスクリプトを表示できます(参照:この投稿)

それでは、最初の質問は - 起動順序を決定するものですか?


起動順序を変更するには、rc.Nディレクトリ内のシンボリックリンク名を編集するか.depend.startinsservupdate-rc.d

2番目の質問 - insservinit.dスクリプトを呼び出した後も持続的な方法で開始順序を制御する方法は何ですかupdate-rc.d

答え1

sysvinit(systemdは異なるがinitscriptではない単位を使用できます)の場合、起動順序は起動中に生成されます/etc/rc?.d。そこのシンボリックリンクは実際には実装の詳細です(etcファイルを含む)。注意すべきは、LSBヘッダーで宣言されたinitscript間の依存関係です。update-rc.dinsserv.depend.boot例えば:

### 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

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

マンページで詳細情報を見つけることができます。insservそしてupdate-rc.d

関連情報