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

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

$ ls /etc/rc.d/rc3.d/
K09dm@         S12syslog@   S24messagebus@     S40atd@         S91dictd-server@
S01udev@       S13partmon@  S25haldaemon@      S55sshd@        S92lisa@
S03iptables@   S15cups@     S25netfs@          S56ntpd@        S95kheader@
S05harddrake@  S17alsa@     S29numlock@        S56rawdevices@  S99local@
S10network@    S18sound@    S33nifd@           S75keytable@
S11shorewall@  S20xfs@      S34mDNSResponder@  S90crond@
$

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

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

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

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

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

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

2.1. Настройка уровней выполнения служб

Вы также можете воспользоваться командой chkconfig для добавления, удаления, включения или выключения служб на заданных уровнях выполнения. Используйте команду chkconfig --add имя_службы для добавления (включения) службы имя_службы на всех поддерживаемых[30] уровнях выполнения и chkconfig --del имя_службы для удаления (выключения) названной службы на всех уровнях выполнения.

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

Выполните команду chkconfig --list, чтобы увидеть список поддерживаемых служб, их имена и состояние для всех определённых уровнея запуска.

Выполнение команды chkconfig --levels 35 sshd on включит сервер SSH (sshd) на 3-м и 5-м уровнях, а выполнение chkconfig --levels 3 sound off уберёт поддержку звука на 3-м уровне. Если вы опустите параметр --levels список_уровней, названные службы будут включены или выключены на уровнях выполнения and 5. Nи howОднако обратите внимание, что вы можете включить службы на уровнях выполнения без соответствующей поддержки этих служб, поэтому нужные уровни выполнения лучше указывать явно.

2.2. Управление службами в работающей системе

В работающей системе службами можно управлять с помощью команды service, независимо от того, настроены ли они на запуск на определёном уровне выполнения или нет. Её синтаксис:

service имя_службы действие

Где имя_службы - это название службы, выводимое командой chkconfig --list, а действие может быть одним из следующих:

start

Запускает названную службу. Пожалуйста, обратите внимание, что большинство служб предупредят вас, если они уже выполняются, а вы пытаетесь снова запустить их: используйте вместо неё опцию restart, описанную ниже.

stop

Останавливает названную службу. Пожалуйста, обратите внимание, что если вы остановите службу, все подключенные к ней пользователи будут автоматически отключены.

restart

Останавливает, а затем запускает названную службу. Это эквивалентно выполнению команды service имя_службы stop && service имя_службы start. Пожалуйста, обратите внимание, что если вы перезапустите службу, все подключенные к ней пользователи будут автоматически отключены.

другие действия

Различные службы поддерживают различные действия (предыдущие действия поддерживаются всеми службами). Например, reload перезагружает файл конфигурации без перезапуска самой службы; force-stop принудительно останавливает службу; status сообщает о состоянии службы; и др. Выполнение service имя_службы без параметров выводит инормацию обо всех действиях, поддерживаемых названной службой.



[30] «Поддерживаемые» уровни выполнения означает, что, например, сетевые службы не будут добавлены на 2-й уровень, который не поддерживает работу с сетью.