この質問はDebianに関するものですが、多くのLinux環境でも同じだと思います。
/etc/init.d
ディレクトリは、ブート時に実行されるサービスを定義します。私が見ると、誰がいつ実行するかを定義する2つのメカニズムがあります。
/etc/rcN.d/
ディレクトリ。init.d
内のスクリプトへのシンボリックリンクがあり、実行順序を定義する番号が付いています。これらのシンボリックリンクは、実行中のupdate-rc.d
から生成されます。insserv
から生成された.depend.start/stop/boot
ファイル。これらのファイルでは、TARGETS
の下に実行中のスクリプトがあり、それらが表示される順序は実行中の順序です( this post を参照)。だから最初の質問-これらのどれが起動順序を決定しますか?
ブート順序を変更するには、rc.N
ディレクトリのシンボリックリンク名を編集するか、.depend.start
の出現順序を変更することができると思います。ただし、これらの変更はどちらもinsserv
またはupdate-rc.d
の呼び出しによって上書きされます。
では、2番目の質問-insserv
またはupdate-rc.d
の呼び出し後に続くように、起動順序のinit.dスクリプトをどのように制御しますか?
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
のマンページを参照してください。