2. Уровни выполнения

Все файлы, связанные с запуском системы, находятся в каталоге /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 вы могли увидеть, что существует шесть уровней выполнения:

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

$ls rc5.d
K59dund@       S12syslog@   S20xfs@         S34mDNSResponder@  S90crond@
K59hidd@       S13partmon@  S24messagebus@  S40atd@            S95kheader@
K59pand@       S14hplip@    S25bluetooth@   S56ntpd@           S99local@
S01udev@       S15cups@     S25haldaemon@   S56rawdevices@
S05harddrake@  S15mdadm@    S25netfs@       S75keytable@
S10network@    S17alsa@     S30dm@          S80postfix@
S12pcscd@      S18sound@    S33nifd@        S85numlock@

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

<S|K><порядок><имя_службы>

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

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

Итак, не рассматривая всех скриптов, мы можем увидеть, что когда система переходит на 5-й уровень выполнения, она сначала запускает команду K15dund (т.е. /etc/rc.d/init.d/dund stop). Затем K59hidd, затем K59pand, и так далее до последней команды. Далее она запускает все скрипты S: сначала S01udev, который в свою очередь вызывает /etc/rc.d/init.d/udev start, и так далее.

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

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

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