Каталоги rc0.d, rc1.d,… в / etc

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запуском?
roger.james
источник

Ответы:

23
  1. Это runlevels и инициация в стиле System V, используемая большинством систем * NIX (с заметным исключением systemdсистем на основе). При загрузке ядро ​​/ пользователь решает, что runlevelему запускать, и выполняет только это runlevel. Это означает, что в зависимости от runlevelтого, что вы можете загрузить с другим набором программ. Существуют также уровни запуска для остановки и перезагрузки, но, поскольку вы сосредоточены на части запуска, давайте пока проигнорируем их.
  2. Поскольку runlevelпри загрузке выполняется только одна , некоторые программы должны / хотят запускаться / останавливаться на разных значениях runlevels с разными или одинаковыми параметрами в одинаковом или разном порядке (не все уровни выполнения одинаковы во всех ОС). Но Ubuntu копирует уровни запуска 3-5 из 2, поэтому они одинаковы.
  3. Кол - runlevels выполняется только один раз при включении или при изменении runlevel.
  4. ntpсценарии должны выполняться сначала, затем dovecotна уровне выполнения 2-5, а не на уровне выполнения 1. Порядковый номер в именах сценариев ( ) указывает порядок выполнения. Итак, все зависит от уровня запуска, который вы используете.S23ntp
  5. Это зависит от дистрибутива, но в конкретном случае Ubuntu вы можете добавить свой скрипт на уровень выполнения 1 и 2.

Больше информации в статье в Википедии о уровнях запуска Ubuntu

Braiam
источник
так что если я поставлю скрипт на все каталоги RC.X, он будет выполняться несколько раз или нет?
Flash Thunder
@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 - убийство. По сути, это ссылки на оригинальные скрипты в /etc/rc.d. Числа после S / K являются приоритетом, по которому службы будут запущены / убиты.

3) Да, если они указаны несколько раз, скрипт запуска / уничтожения будет запускаться несколько раз. Но никто не хочет этого делать.

4) Если посмотреть на номера приоритетов, сначала запустится служба ntp, а затем dovecot.

5) 4-й пункт - это путь.

Альберт
источник