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


30

私は、ディレクトリを持っているの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.dしてrc6.d
  3. 上記のように複数回指定された場合、実際に複数回実行されますか?
  4. 上記から、起動時にどの順序dovecotntp実行されますか?
  5. Ubuntuを起動ntp前に常に実行するように指示する適切な方法は何dovecotですか?

回答:


23
  1. これらはrunlevelsであり、ほとんどの* NIXシステムで使用されるSystem Vスタイルの開始です(systemdベースのシステムの顕著な例外を除く)。カーネル/ユーザーを起動するとき、何runlevelを実行し、それだけを実行するかを決定しrunlevelます。つまりrunlevel、異なるプログラムのセットで起動できるということです。停止および再起動用のランレベルもありますが、起動部分に焦点を当てているため、ここでは無視します。
  2. runlevel起動時に実行されるのは1つだけなので、一部のプログラムはrunlevel、同じまたは異なる順序で異なるまたは同じパラメーターを使用して、異なるsで開始/停止する必要があります(すべてのOSですべてのランレベルが同じではありません)。しかし、Ubuntuは2からランレベル3-5をコピーするので、それらは同じです。
  3. いいえrunlevel。sは、起動時または変更時に1回だけ実行されますrunlevel
  4. ntpスクリプトはdovecot、ランレベル1の場合ではなく、最初にランレベル2〜5で実行する必要があります。スクリプト名の序数()は、実行順序を示しています。そのため、使用しているランレベルに依存します。S23ntp
  5. Distroに依存しますが、Ubuntuの特定のケースでは、ランレベル1および2にスクリプトを追加できます。

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


したがって、すべてのRC.Xディレクトリにスクリプトを配置すると、数回実行されますか?
Flash Thunder

@FlashThunderいいえ。
Braiam

40

他の人が述べたように、答えはすべて、基本的にオペレーティングシステムの動作モードであるランレベルに関するものです。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は、の前に 実行されます(この場合は開始されます)S24dovecot


素晴らしい答えです!2つのスクリプトは、例えば、同じ番号を持っているものとしますS01bluetoothS01rsync、順序は任意になりますか?
direprobs

@direprobsハァッ、いい質問。はい、どちらかがランダムに選択されると思います。しかし、私が知っていると言うことはできません。
テルドン

@tredon S01比較がb< rで始まるので、ファイル名に基づいて選択されると思います。多分!
direprobs

1
短い答えは、/etc/init.d/rcと言うfor s in /etc/rc$runlevel/S*; do …ので、それは単にグロブ拡張の順番になります。すなわち、数字/アルファベット。長い答えは、そこにあるコードは私が覚えているよりもずっと複雑だということです。今後6週間から8週間以内にいつか真剣に勉強するつもりです。それは後に番号を抽出しているように一見、それは見えますSし、それを使って何かをやって、そうS42beeblebroxS42zaphodより緊密に言って、より関連する、かもしれないS43arthurS44dent
G-Manは「

本当に素晴らしい回答をありがとう、しかし質問があります。プログラムを起動しましたが、アプリの速度が遅いです:stackoverflow.com/questions/49251955/…–
H.Ghassami

4

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

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

3)はい、それらが複数回指定された場合、開始/強制終了スクリプトが複数回実行されます。しかし、誰もそれを望んでいません。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.