Режимы Выполнения (runlevels)

Все файлы, имеющие отношение к загрузке находятся в каталоге /etc/rc.d. Вот список файлов:

$ ls /etc/rc.d
init.d/  rc.local*    rc0.d/  rc2.d/  rc4.d/  rc6.d/
rc*      rc.sysinit*  rc1.d/  rc3.d/  rc5.d/

В начале, как мы видим, запускается файл rc.sysinit. Этот файл отвечает за установки базовой конфигурации машины: тип клавиатуры, конфигурация некоторых устройств, проверка файловой системы и т.д.

Затем запускается скрипт rc, с желаемым номером runlevel в качестве аргумента. Как мы видим, runlevel это простое целое число, и для каждого runlevel <x> имеется соответствующий rc<x>.d каталог. В обычной инсталляции Mandrake Linux вы можете увидеть 6 определенных runlevel:

Давайте посмотрим, например, на содержимое каталога rc5.d:

$ ls rc5.d
K15postgresql@  K60atd@      S15netfs@   S60lpd@        S90xfs@
K20nfs@         K96pcmcia@   S20random@  S60nfs@        S99linuxconf@
K20rstatd@      S05apmd@     S30syslog@  S66yppasswdd@  S99local@
K20rusersd@     S10network@  S40crond@   S75keytable@
K20rwhod@       S11portmap@  S50inet@    S85gpm@
K30sendmail@    S12ypserv@   S55named@   S85httpd@
K35smb@         S13ypbind@   S55routed@  S85sound@

Как вы видите, все файлы в этом каталоге это символические ссылки, и все они имеют специфический вид. Их общий вид такой:

<S|K><order><service_name>

S обозначает Start сервиса, а K обозначает Kill (остановку) сервиса. Скрипты запускаются в возрастающем порядке номеров, а если два скрипта имеют одинаковый номер, тогда действует алфавитный порядок. Мы также видим, что каждая символическая ссылка указывает на соответствующий скрипт в каталоге /etc/rc.d/init.d (кроме local), скрипт, который отвечает за контроль особого сервиса.

Когда система отправляется в заданный runlevel, все начинается с запуска K ссылок в таком порядке: rc ищет куда указывает ссылка, затем вызывает соответствующий скрипт с одним аргументом stop. Затем запускаются S скрипты, используя тот же метод, не учитывая того факта, что скрипт вызван с аргументом start.

Итак, не учитывая всех остальных скриптов, мы можем видеть, что когда система переходит в runlevel 5, сначала запускается K15postgresql, то есть /etc/rc.d/init.d/postgresql stop. Затем K20nfs, затем K20rstatd, и так до последнего; потом, запускаются все S скрипты: первым S05apmd, который вызывает /etc/rc.d/init.d/apmd start, и так далее.

Вооружившись всем этим, вы можете создать свой собственный целый runlevel за несколько минут, или предотвратить запуск или остановку сервиса путем удаления соответствующей символической ссылки (есть также программы с интерфейсом для выполнения этого, в особенности drakxservices и chkconfig; бывшая графическая программа)