rc スクリプト
init がランレベルに入ると、移動先のランレベルを指定する数値引数を使用して rc スクリプトを呼び出します。 rc は、システムをそのランレベルにするために、必要に応じてシステム上のサービスを開始および停止します。通常は起動時に呼び出されますが、rc スクリプトは init によって呼び出されてランレベルを変更できます。たとえば、次のコマンドを使用してシステムをランレベル 3 に変更できます:
# init 3
ランレベル 3 に変更すると、rc は、ランレベル 3 で実行されるはずのないすべてのサービスを停止し、ランレベル 3 で実行されていてまだ実行されていないすべてのサービスを開始することにより、システムを新しいランレベルに移行します。
システム初期化スクリプトはすべて /etc/rc.d にあります。このサブディレクトリには、ランレベルごとに 1 つずつサブディレクトリがあります:rc0.d–rc6.d および init.d . /etc/rc.d/rc#.d サブディレクトリ (# は 1 桁の数字に置き換えられます) 内には、/etc/rc.d/init.d に保存されているマスター スクリプトへのシンボリック リンクがあります。
# ls -lrt /etc/rc.d total 60 -rwxr-xr-x 1 root root 889 Jan 29 2015 rc.local -rwxr-xr-x 1 root root 20199 Oct 4 2017 rc.sysinit -rwxr-xr-x 1 root root 2617 Oct 4 2017 rc drwxr-xr-x. 2 root root 4096 Mar 20 16:49 init.d drwxr-xr-x. 2 root root 4096 Mar 20 16:49 rc1.d drwxr-xr-x. 2 root root 4096 Mar 20 16:49 rc0.d drwxr-xr-x. 2 root root 4096 Mar 20 16:49 rc6.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc4.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc3.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc2.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc5.d
init.d のスクリプトは、start または stop の引数を取り、場合によっては reload または restart の引数を取ります。
ランレベルの実装
ランレベルは、特定のデーモンを開始および停止するためのシェル スクリプトを含むシステム上のディレクトリとして実装されます。 /etc/rc1.d/.ほとんどのシステムには、ランレベル 0 ~ 6 のディレクトリがあります。
各ディレクトリ内のスクリプトは、大文字の S のいずれかで名前が付けられます 、または大文字の K 、その後に 2 桁の数字、その後に参照されているサービスの名前が続きます。大文字の S で始まるファイルは、そのランレベルに入ったときに開始されるスクリプトを表し、大文字の K で始まるファイルは、停止されるスクリプトを表します。番号は、スクリプトを実行する順序を指定します。
たとえば、デーモンには、rc3.d/ に S35daemon という名前のスクリプトがあり、rc2.d/ にそれを停止するための K65daemon という名前のスクリプトがある場合があります。ファイル名の先頭に番号を付けると、目的の順序で並べ替えられ、処理されます。
/etc/rc
ランレベルを変更するために /etc/rc プログラムが init によって呼び出されると、ターゲット ランレベルのディレクトリに移動し、すべての K## スクリプト ファイルを処理して、ターゲット ランレベルにあってはならない現在実行中のサービスを停止します。ターゲット ランレベルで実行されるべきであるが、現在は実行されていないサービスの S##script ファイル。
/etc/rc プログラムが Linux で動作する方法のため、個々の /etc/rc#.d/ ディレクトリには、サービスごとに S##script または K##script シンボリック リンクしかありません。 7 つの /etc/rc#.d/ ディレクトリのそれぞれに、各サービスのシンボリック リンクもあります。 S99local ファイル (../rc.local へのシンボリック リンク) を除いて、これは /etc/rc1.d/ から /etc/rc5.d/ にのみ表示され、対応する kill シンボリック リンクがないため、常に同じファイルが存在する必要があります。各ランレベル ディレクトリ内のファイル数。
起動時の依存関係の順序
スクリプトを適切な順序で開始および停止することが重要です。たとえば、NFS と NIS が正しく機能するためには、最初に RPC ポートマッパー デーモン rpcbind を開始する必要があります。
/etc/init.d/
スクリプトの重複を避けるために、rc#.d/ ディレクトリ内のファイルは、実際には /etc/init.d/ ディレクトリにあるスクリプト ファイルへのシンボリック リンクになっています。システムにインストールされたすべてのサービスは、そのサービスを制御するために使用できるスクリプトをこのディレクトリにインストールします。これらのスクリプトは、サービスを開始する必要があることを指定する開始オプションと、サービスを停止する必要があることを指定する停止オプションを受け取るように記述されています。
Upstart と SysV ランレベルの互換性
Upstart にはランレベルの内部概念がないため、それらのサポートは /etc/init/rc.conf ファイルによって定義されます。このサポートは、Single Unix 仕様および以前の SysV Init 実装に下位互換性を提供するために存在します。
/etc/rc.local
システム上でタスクを実行するためのカスタム スクリプトを /etc/init.d/ ディレクトリに作成し、それらのスクリプトへのシンボリック リンクを /etc/rc#.d/ ディレクトリに作成して、次のようにスクリプトを開始または停止できます。必要。ただし、一部のタスクでは、本格的な System V スタイルの init スクリプトを作成し、開始オプションと停止オプションを完備するのはやり過ぎです。たとえば、一部のタスクは、システムの起動時に一度実行する必要がありますが、強制終了する必要はありません。または、システムがランレベルを変更するたびに実行する必要はありません。または、他の理由で、 System V Init スクリプト。