Каталоги 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 встановив копії dovecotта ntpу всі каталоги, крім rc0.dі rc6.d?
  3. Якщо вони вказані кілька разів, як вище, чи справді вони виконуються кілька разів?
  4. Чи можете ви сказати з вищезазначеного в якому порядку dovecotі ntpбуде виконуватися при запуску?
  5. Який правильний спосіб сказати Ubuntu завжди виконуватись ntpперед dovecotзапуском?

Відповіді:


23
  1. Це runlevelі є ініціацією системного V стилю, що використовується більшістю систем NIX (за винятком винятків систем на systemdбазі). Під час завантаження ядро ​​/ користувач вирішує, що runlevelйому слід запускати і виконувати лише це runlevel. Тобто, залежно від того, runlevelви можете завантажуватися з різним набором програм. Існують також рівні для зупинки та перезавантаження, але оскільки ви зосереджуєтеся на частині запуску, давайте їх ігноруємо.
  2. Оскільки runlevelпід час завантаження виконується лише одна , деякі програми повинні / хочуть запускати / зупинятись на різних runlevels з різними або тими ж параметрами в тому ж або іншому порядку (не всі рівні запуску однакові у всіх ОС). Але Ubuntu копіює рівні від 3 до 2, тому вони однакові.
  3. Кількість runlevels виконується лише один раз під час запуску або при зміні runlevel.
  4. ntpСценарії повинні виконуватись спочатку dovecotна рівні 2-5, а не у випадку з runlevel 1. Порядковий номер у назвах скриптів ( ) вказує порядок виконання. Отже, все залежить від рівня, який ви використовуєте.S23ntp
  5. Це залежить від Distro, але в конкретному випадку Ubuntu ви можете додати свій скрипт до рівня 1 і 2.

Більше інформації в статті Вікіпедії про бігові рівні Ubuntu


Так що, якщо я покладу сценарій до всіх директорів RC.X, він виконається кілька разів чи ні?
Спалах Грім

@FlashThunder ні.
Брайам

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 .


Чудова відповідь! Що робити, якщо два сценарії мають однакові числа, наприклад: S01bluetoothі S01rsync, чи буде порядок довільним?
direprobs

@direprobs так, гарне запитання. Так, я б здогадався, що будь-який буде обраний випадковим чином. Не можу сказати, що я знаю.
тердон

@tredon Я думаю, що їх виберуть на основі своїх імен, оскільки вони починаються зі S01порівняння b< r, ви отримаєте ідею. Можливо!
direprobs

1
Коротка відповідь - /etc/init.d/rcкаже for s in /etc/rc$runlevel/S*; do …, тому вона просто йде в порядку розширення глобальних; тобто числовий / алфавітний. Довга відповідь полягає в тому, що код там набагато складніше, ніж я пам’ятаю. Я спробую витратити серйозний час на його вивчення десь протягом наступних шести-восьми тижнів. На перший погляд, це виглядає , як це витягуючи номер після Sі робити що - то з ним, так S42beeblebroxі S42zaphodможе бути більш тісно пов'язані , ніж, скажімо, S43arthurі S44dent.
G-Man каже: "Відновіть Моніку"

дуже дякую за чудову відповідь, але у мене є питання. Я поклав свою програму в автозавантаження, але швидкість програми низька: stackoverflow.com/questions/49251955 / ...
H.Ghassami

4

1) Кілька каталогів rcX.d вказують, які послуги запускати чи зупиняти під час рівня "X".

2) rc0.d призначений для запуску рівня 0, який закривається. rc6.d призначений для перезавантаження. Відпочинок - всі для різних рівнів (2 - 5). S означає початок, а K - Kill. Це по суті посилання на оригінальні сценарії в /etc/rc.d. Цифри після S / K є пріоритетом, за допомогою якого послуги будуть запускатися / вбиватися.

3) Так, якщо вони вказані кілька разів, сценарій запуску / вбиття буде запущений кілька разів. Але ніхто не хоче цього робити.

4) Дивлячись на пріоритетні номери, спочатку запускається служба ntp, а потім голуб.

5) 4-й пункт - шлях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.