
Я использую 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
Вопросы:
- Каково назначение нескольких каталогов «rc»?
- Почему Ubuntu установила дубликаты
dovecot
иntp
во все каталоги, кромеrc0.d
иrc6.d
? - Если они указаны несколько раз, как указано выше, выполняются ли они на самом деле несколько раз?
- Можете ли вы из вышесказанного определить, в каком порядке
dovecot
и в каком порядкеntp
они будут выполняться при запуске? - Как правильно указать Ubuntu, что нужно всегда выполнять команду
ntp
beforedovecot
при запуске?
решение1
Как уже отмечалось, ответ заключается в следующем:уровни запускакоторые в основном являются режимами работы операционной системы. В 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
- Это
runlevel
s и инициация в стиле System V, используемая большинством систем *NIX (за исключениемsystemd
систем на основе -). При загрузке ядро/пользователь решает, чтоrunlevel
запустить, и выполняет только этоrunlevel
. Это означает, что в зависимости отrunlevel
вы можете загрузиться с другим набором программ. Также есть уровни запуска для остановки и перезагрузки, но поскольку вы сосредоточены на части запуска, давайте пока проигнорируем их. runlevel
Поскольку при загрузке выполняется только один , некоторые программы должны/хотят запускаться/останавливаться в разныхrunlevel
s с разными или одинаковыми параметрами в одном или разном порядке (не все уровни запуска одинаковы во всех ОС). Но Ubuntu копирует уровни запуска 3-5 из 2, поэтому они одинаковы.- Номера
runlevel
выполняются только один раз при запуске или при измененииrunlevel
. ntp
скрипты должны выполняться сначалаdovecot
на уровнях запуска 2-5, а не в случае с уровнем запуска 1. Порядковый номер в именах скриптов ( ) указывает порядок выполнения. Таким образом, все зависит от используемого вами уровня запуска.S23ntp
- Это зависит от дистрибутива, но в конкретном случае Ubuntu вы можете добавить свой скрипт на уровни запуска 1 и 2.
Более подробная информация вВикипедиястатья об уровнях запуска Ubuntu
решение3
1) Несколько каталогов rcX.d определяют, какие службы следует запускать или останавливать на уровне выполнения «X».
2) rc0.d — для уровня запуска 0, который соответствует выключению. rc6.d — для перезагрузки. Все остальные — для разных уровней запуска (2–5). S означает запуск, а K — завершение. По сути, это ссылки на исходные скрипты в /etc/rc.d. Цифры после S/K — это приоритет, по которому службы будут запускаться/завершаться.
3) Да, если они указаны несколько раз, скрипт запуска/уничтожения будет запущен несколько раз. Но никто не хочет этого делать.
4) Судя по номерам приоритетов, сначала будет запущена служба ntp, а затем dovecot.
5) Четвертый пункт — путь.