web-dev-qa-db-ja.com

/ etc内のrc0.d、rc1.d、...ディレクトリ

Ubuntuを実行していますが、/etc/rc0.d/etc/rc1.d/etc/rc2.d、...、/etc/rc6.dというディレクトリがあります。

私のマシンからのサンプルファイル:

directory      example symlinks in the dir
------------------------------------------
/etc/rc1.d:    K76dovecot, K77ntp
/etc/rc2.d:    S23ntp, S24dovecot
/etc/rc3.d:    S23ntp, S24dovecot
/etc/rc4.d:    S23ntp, S24dovecot
/etc/rc5.d:    S23ntp, S24dovecot

質問:

  1. 複数の「rc」ディレクトリの目的は何ですか?
  2. Ubuntuがdovecotntpの複製をrc0.drc6.dを除くすべてのディレクトリにインストールしたのはなぜですか?
  3. 上記のように複数回指定されている場合、実際には複数回実行されていますか?
  4. 起動時にdovecotntpがどの順序で実行されるかを上から確認できますか?
  5. 起動時に常にntpの前にdovecotを実行するようUbuntuに指示する適切な方法は何ですか?
32
roger.james
  1. これらはrunlevelsであり、ほとんどの* NIXシステムで使用されているSystem Vスタイルのイニシエーションです(systemdベースのシステムを除いて)。カーネル/ユーザーの起動時に、実行するrunlevelを決定し、そのrunlevelのみを実行します。つまり、runlevelに応じて、別のプログラムセットで起動できます。停止と再起動のランレベルもありますが、起動部分に焦点を当てているので、今のところは無視してみましょう。
  2. ブート時に実行されるrunlevelは1つだけなので、一部のプログラムは、異なるまたは同じパラメーターを同じまたは異なる順序で異なるrunlevelsで開始/停止する必要があります(すべてのランレベルが同じではありません)すべてのOS)。しかし、Ubuntuはランレベル3から5を2からコピーしているため、同じです。
  3. いいえ。runlevelsは、起動時またはrunlevelを変更したときに一度だけ実行されます。
  4. ntpスクリプトは最初に実行され、次にランレベル2-5でdovecotが実行されます。ランレベル1の場合は異なります。スクリプト名の序数(S23ntp)は実行の順序を示します。したがって、それはすべて、使用しているランレベルに依存します。
  5. Distroに依存しますが、Ubuntuの特定のケースでは、スクリプトをランレベル1および2に追加できます。

Ubuntuランレベルに関する Wikipedia 記事の詳細

23
Braiam

他の人が指摘したように、答えは基本的にオペレーティングシステムの動作モードである runlevels に関するすべてです。 Linuxでは、これらは通常次のとおりです。

ID  Name                               Description
0   Halt                               Shuts down the system.
1   Single-user Mode                   Mode for administrative tasks.
2   Multi-user Mode                    Does not configure network interfaces and 
                                       does not export networks services.
3   Multi-user Mode with Networking    Starts the system normally.
4   Not used/User-definable            For special purposes.
5   Start the system normally with 
    with GUI                           As runlevel 3 + display manager.
6   Reboot                             Reboots the system.

したがって、各rcNディレクトリには、そのランレベルで実行する必要があるスクリプトへのシンボリックリンクが含まれています。実際のスクリプトはすべて、通常/etc/init.dディレクトリにあります。

$ ls -l /etc/rc5.d/S22cron
lrwxrwxrwx 1 root root 14 Jan 14  2013 /etc/rc5.d/S22cron -> ../init.d/cron

シンボリックリンクの命名

名前がSで始まるシンボリックリンクは問題のランレベルで開始され、名前がKで始まるシンボリックリンクは削除されます。再起動ランレベルであるrc6.dのすべてのリンクは、Kで始まることに注意してください。これは、再起動のためにすべてを停止し、何も開始しないようにする必要があるためです。

先頭の文字の後の番号は、リンクされたスクリプトの実行順序を示しています。番号が小さいものは、番号が大きいものより先に実行されます。したがって、具体的な例では、S23ntpが実行されます(この場合は開始されます)beforeS24dovecot

41
terdon

1)複数のrcX.dディレクトリは、「X」ランレベル中に開始または停止するサービスを指定します。

2)rc0.dは、シャットダウンされたランレベル0用です。 rc6.dは再起動用です。残りはすべて、異なるランレベル(2〜5)用です。 Sは開始を意味し、Kはキルを意味します。これらは基本的に/etc/rc.dにある元のスクリプトへのリンクです。 S/Kの後の数字は、サービスが開始/強制終了される優先順位です。

3)はい、それらが複数回指定されている場合は、start/killスクリプトが複数回実行されます。しかし、誰もそれをしたくありません。

4)優先順位番号を見ると、最初にntpサービスが開始され、次にdovecotが開始されます。

5)4番目のポイントは方法です。

4
Albert