Уровни работы

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

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

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

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

Давайте взглянем на содержимое каталога 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><порядок><имя_службы>

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

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

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

Вооружившись этой информацией, вы за несколько минут сможете создать свой собственный уровень работы (задействовав, например, 4-й), или предотвратить запуск или остановку службы, удалив соответствующую символическую ссылку. Для этого вы также можете воспользоваться программами с интерфейсом, в особенности drakxservices (см. DrakXServices: Configuring Start-Up Services в Стартовое руководство???) или chkconfig для настройки в текстовом режиме.

[Tip]Подсказка

Вы также можете воспользоваться командой chkconfig для вывода списка, добавления или удаления служб из определенного уровня работы. Смотрите chkconfig(8).