init.d
は忘れましょう または rcx.d
物事を非常にシンプルに保ちます。他のスクリプトを 1 つずつ実行または強制終了することだけを担当するプログラムをプログラミングしていると想像してください。
ただし、次の問題は、それらが順番に実行されるようにすることです。どのように実行しますか?
そして、このプログラムが scripts
の中にあると想像してみましょう スクリプトを実行するためのフォルダー。スクリプトの優先順位を付けるには、番号順に名前を付けます。この順序は init.d
間の関係を決定するものです と rc
つまり init.d
実行するスクリプトと rcX.d
が含まれています 実行する順序が含まれています。
X
rcX.d
の値 実行レベルです。これは、大まかに OS の現在の状態に変換できます。
rcX.d
の内部を掘り下げると、 このフォーマットを見つけることができるスクリプト:
Xxxabcd
X
K
に置き換えられます またはS
、スクリプトがkilled
であるべきかどうかを表します またはstarted
現在の実行レベルxx
は注文番号ですabcd
はスクリプト名です (名前は関係ありませんが、それが指している場所が実行されるスクリプトです)
Linux にはいくつかの異なる init システムがあります。主なものは、SysVinit (従来のもの)、Upstart (Ubuntu の後継)、および SystemD (Fedora と Gnome によってプッシュされたもの) です。ディレクトリ /etc/init.d
と /etc/rc?.d
SysVinit によって使用されます。情報が少し古いため (Ubuntu は他の皆と同じように SysVinit を使用していました)、または互換性のためにそれらのディレクトリがまだ存在するため、この本は Ubuntu に関して言及している可能性があります。
/etc/init.d
多数のスクリプトが含まれており、それぞれにサービスを開始および停止するための指示が含まれています。これらのサービスの一部は、起動時に開始する必要があります。その他はマルチユーザー モードで起動する必要がありますが、シングル ユーザー メンテナンス モードでは起動しません。また、必要なサービスのさまざまなセットでさまざまなモードを定義することができます。 SysVinit はランレベルを通じてこれを管理します。ディレクトリ /etc/rc$N.d
ランレベル N (/etc/rc$N.d/S*
) に入ったときに実行するスクリプトを含む ) およびランレベル N (/etc/rc$N.d/K*
を終了するときに実行するスクリプト) )。多くのランレベルには共通のスクリプトがあるため、ランレベルごとにスクリプトのコピーを保存するのではなく、スクリプトはすべて単一の場所に保存されます /etc/init.d
、およびランレベル固有のディレクトリ /etc/rc?.d
シンボリックリンクが含まれています。さらに、シンボリック リンクの名前は、サービスを開始するかどうかを示します (S*
) または停止 (killed、K*
)、そのランレベルで、スクリプトが実行される順序を制御するために数値プレフィックスが使用されます。
/etc/rc$N.d
をトラバースするスクリプト /etc/init.d/rc
です (アップスタート前の Ubuntu と Debian の場合。他の Linux ディストリビューションでは場所が異なる場合があります)。
/etc/init.d
init スクリプトが属するディレクトリです。
etc/rcX.d
ランレベル X
に入ったときに、どのサービスを強制終了または開始するかを制御するリンクです。 . rcX.d
のファイル K で始まるパラメータ stop
で実行されます 、および S
で始まるファイル パラメータ start
で実行されます . K
の後に 2 桁の数字を使用して、起動と停止の順序を並べ替えるのが一般的です。 または S
.適切な開始と停止の順序を確保するために、2 つのシーケンスの合計が 100 になるのが一般的です。
リンクを削除するか、K
の大文字と小文字を変更することにより、実行レベルでプログラムを無効にすることができます。 または S
k
へ または s
.
編集:管理者は通常 /etc/init.d
からスクリプトを実行します これは、ディストリビューションによっては、別のディレクトリへのシンボリック リンクである場合があります。 (ディストリビューションが異なれば、標準も異なります。)
rcX.d
初期化コードで実行レベルを変更するために使用されます。