Intereting Posts
Coreutils realpath: запутанный вывод при использовании с жесткой (?) Ссылкой Могу ли я использовать modulecmd с раковиной? отследить установщик исполняемых файлов Как добавить дефисы в первую пустую строку текстового файла? Скомпилированные (?) Java-пакеты на Debian Как имитировать Wi-Fi, выходящий за пределы диапазона, включив / выключив точку доступа на моем устройстве Linux? как автоподключить наушники bluetooth в Fedora 25? Изменение свойств X-объекта Zombie из состояния Iconic в нормальное состояние расширение скобки других команд помимо mkdir? Взять ввод из одного файла и добавить в другой файл в конкретном столбце PXE USB BOOT Debian Как проверить, что изменяется содержимое файла, а не atime, mtime, ctime в Linux? Не удалось создать пользователя в FreeBsd: pw: имя пользователя или идентификатор Сценарий оболочки выйдет рано по неясным причинам Как настроить grub для загрузки другого дистрибутива Linux из раздела lvm?

При запуске на уровень выполнения он выполняет предыдущие уровни выполнения?

Если я скажу, что моя система переходит на уровень 3, это означает, что она сначала проходит через уровень выполнения 0, 1, 2, а затем, наконец, проходит через уровень запуска 3?

Я думал, что ответ на этот вопрос был да. Но когда я смотрю на свою систему RHEL 6, я вижу, что многие каталоги rcX.d содержат одинаковые символические ссылки.

В My /etc/rc.d/rc0.d/

[root@centos6 rc.d]# ls -lah /etc/rc.d/rc0.d/ total 8.0K drwxr-xr-x. 2 root root 4.0K Jun 27 11:59 . drwxr-xr-x. 10 root root 4.0K Jul 9 15:06 .. lrwxrwxrwx. 1 root root 13 Jun 12 13:02 K05atd -> ../init.d/atd lrwxrwxrwx. 1 root root 14 Jun 12 13:01 K10cups -> ../init.d/cups lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd lrwxrwxrwx. 1 root root 18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve lrwxrwxrwx. 1 root root 14 Jun 12 10:58 K25sshd -> ../init.d/sshd lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K30postfix -> ../init.d/postfix lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq lrwxrwxrwx. 1 root root 20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole lrwxrwxrwx. 1 root root 15 Jun 12 10:57 K60crond -> ../init.d/crond lrwxrwxrwx. 1 root root 25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service lrwxrwxrwx. 1 root root 17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd lrwxrwxrwx. 1 root root 21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11 lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K73winbind -> ../init.d/winbind lrwxrwxrwx. 1 root root 19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon lrwxrwxrwx. 1 root root 26 Jun 12 10:58 K75blk-availability -> ../init.d/blk-availability lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K75netfs -> ../init.d/netfs lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K75udev-post -> ../init.d/udev-post lrwxrwxrwx. 1 root root 24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager lrwxrwxrwx. 1 root root 24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant lrwxrwxrwx. 1 root root 19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor lrwxrwxrwx. 1 root root 20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus lrwxrwxrwx. 1 root root 20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd lrwxrwxrwx. 1 root root 21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K88auditd -> ../init.d/auditd lrwxrwxrwx. 1 root root 15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid lrwxrwxrwx. 1 root root 21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc lrwxrwxrwx. 1 root root 17 Jun 12 11:15 K90network -> ../init.d/network lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables lrwxrwxrwx. 1 root root 18 Jun 12 10:57 K92iptables -> ../init.d/iptables lrwxrwxrwx. 1 root root 22 Jun 12 10:58 K99lvm2-monitor -> ../init.d/lvm2-monitor lrwxrwxrwx. 1 root root 17 Jun 12 11:15 S00killall -> ../init.d/killall lrwxrwxrwx. 1 root root 14 Jun 12 11:15 S01halt -> ../init.d/halt lrwxrwxrwx. 1 root root 15 Jun 26 12:32 S95jexec -> ../init.d/jexec 

И в /etc/rc.d/rc1.d/ Я вижу тот же набор символических ссылок, что и в rc0.d плюс дополнительные ссылки. Это, по-видимому, указывает на то, что каталоги rc0.d, rc1.d независимы и что для запуска уровня 1 он не выполняет материал на уровне запуска 0. Это означает, что могут произойти плохие вещи, если некоторые из них символические ссылки в rc0 .d не были точно воспроизведены в rc1.d, … и т. д.

Итак, как это работает? Проверяет ли он только файлы в определенном каталоге rc.X или запускает все rc.X-dirs, которые имеют более низкий уровень, чем уровень rc, переданный init?

 [root@centos6 rc.d]# ls -lah /etc/rc.d/rc1.d/ total 8.0K drwxr-xr-x. 2 root root 4.0K Jun 27 11:59 . drwxr-xr-x. 10 root root 4.0K Jul 9 15:06 .. lrwxrwxrwx. 1 root root 13 Jun 12 13:02 K05atd -> ../init.d/atd lrwxrwxrwx. 1 root root 14 Jun 12 13:01 K10cups -> ../init.d/cups lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd lrwxrwxrwx. 1 root root 18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve lrwxrwxrwx. 1 root root 14 Jun 12 10:58 K25sshd -> ../init.d/sshd lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K30postfix -> ../init.d/postfix lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq lrwxrwxrwx. 1 root root 20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole lrwxrwxrwx. 1 root root 15 Jun 12 10:57 K60crond -> ../init.d/crond lrwxrwxrwx. 1 root root 25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service lrwxrwxrwx. 1 root root 17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd lrwxrwxrwx. 1 root root 21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11 lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K73winbind -> ../init.d/winbind lrwxrwxrwx. 1 root root 19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K75netfs -> ../init.d/netfs lrwxrwxrwx. 1 root root 24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager lrwxrwxrwx. 1 root root 24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant lrwxrwxrwx. 1 root root 19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor lrwxrwxrwx. 1 root root 20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus lrwxrwxrwx. 1 root root 20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd lrwxrwxrwx. 1 root root 21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K88auditd -> ../init.d/auditd lrwxrwxrwx. 1 root root 15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid lrwxrwxrwx. 1 root root 21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc lrwxrwxrwx. 1 root root 17 Jun 12 11:15 K90network -> ../init.d/network lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables lrwxrwxrwx. 1 root root 18 Jun 12 10:57 K92iptables -> ../init.d/iptables lrwxrwxrwx. 1 root root 22 Jun 12 10:58 S02lvm2-monitor -> ../init.d/lvm2-monitor lrwxrwxrwx. 1 root root 26 Jun 12 10:58 S25blk-availability -> ../init.d/blk-availability lrwxrwxrwx. 1 root root 19 Jun 12 10:57 S26udev-post -> ../init.d/udev-post lrwxrwxrwx. 1 root root 15 Jun 26 12:32 S95jexec -> ../init.d/jexec lrwxrwxrwx. 1 root root 16 Jun 12 11:15 S99single -> ../init.d/single 

Когда вы переключаете уровень запуска, выполняются только сценарии в /etc/rc.d/rc${NEW_LEVEL}.d/ .

Это означает, что вы правы: каждый каталог rc*.d должен иметь возможность обрабатывать все изменения процесса / службы при переключении с другого уровня запуска. Поэтому каждый каталог rc содержит полный набор скриптов для достижения этого уровня выполнения.

Предположим, вы переходите на уровень запуска 3. Сценарии /etc/rc.d/rc3.d/K* будут пытаться убить любые процессы, которые выполнялись в любом предыдущем уровне выполнения (может быть любым числом), и /etc/rc.d/rc3.d/S* будут /etc/rc.d/rc3.d/S* любые процессы, которые необходимо запустить (и не были запущены на предыдущем уровне выполнения).

Очевидно, что управление всеми этими символическими ссылками будет настоящей болью, поэтому есть утилиты, которые помогут справиться с этим. В Debian и Ubuntu (по крайней мере, возможно, другие) вы можете использовать update-rc.d для выборочного включения / выключения скриптов, найденных в /etc/init.d , или для установки их по умолчанию или по рекомендованным параметрам для каждого сценария , Это создаст и обновит все символические ссылки для вас, чтобы отразить любые изменения конфигурации, которые вы хотите внедрить. В CentOS я понимаю, что вы можете использовать ntsysv или chkconfig чтобы сделать то же самое.

Эффективно, вы никогда не прикасаетесь к файлам в /etc/rc*.d/ (или /etc/rc.d/rc*.d/ ) самостоятельно; вы всегда используете инструмент (например, update-rc.d ntsysv , ntsysv , chkconfig ), чтобы внести какие-либо изменения.

Если я скажу, что моя система переходит на уровень 3, это означает, что она сначала проходит через уровень выполнения 0, 1, 2, а затем, наконец, проходит через уровень запуска 3?

Нет. Уровни выполнения не являются последовательными таким образом.

Дело в том, что уровень запуска 0 обычно представляет собой уровень запуска «shutdown», который останавливает все службы и в конечном итоге останавливает (и, возможно, отключает) систему. Было бы не очень хорошо, если бы, чтобы добраться до полностью запущенной системы, init сначала перешел в уровень выполнения 0.

Тем не менее, в процессе загрузки обычно происходит прогрессирование . Ядро инициализируется в уровне выполнения 1, затем передает управление init, которое обычно настроено таким образом, что оно переходит в уровень выполнения 2 (многопользовательский без сети), за которым следует уровень запуска 3 (полностью рабочий текстовый режим) и, возможно, уровень выполнения 5 (полностью работоспособный графический режим). Но это на самом деле полностью настраивается, а специфика того, что входит в уровень выполнения, в основном по соглашению. Я думаю, что, по крайней мере, в прошлом Debian использовал runlevel 4 для полнофункционального графического режима, например, и на моем Debian Wheezy уровни выполнения 2 и 3 оказались идентичными ( diff <(ls /etc/rc2.d) <(ls /etc/rc3.d) ничего не выводит). То, что соответствует каждому уровню выполнения, зависит от администратора.

Также по соглашению, уровень запуска 6 обычно настраивается для перезагрузки системы; вы можете перейти непосредственно к уровню выполнения 6, например, к уровню выполнения 1, особенно во время обслуживания системы, если что-то не позволяет ОС загружаться в обычном режиме.

Также стоит отметить, что в системах, отличных от Linux, могут быть разные представления о том, для чего предназначены разные уровни выполнения, или имеют другое количество уровней выполнения. Концепция, вероятно, довольно универсальна в мире * nix, но реализация и фактическое использование могут сильно отличаться.

В целом, «уровни запуска» – это просто удобный способ группировки связанных процессов и состояния системы в управляемые пакеты, которые могут быть выбраны администратором. (И как в стороне, Windows имеет очень похожую концепцию с отказоустойчивым режимом, отказоустойчивым с сетью, отказоустойчивым с командной строкой, нормальной загрузкой и т. Д.).