Библиотека сайта rus-linux.net
7.3. Как эти стартовые скрипты работают?
Linux использует специальные средства загрузки, называемые SysVinit, которые основаны на концепции уровней запуска. Они могут сильно различаться от одной системы к другой, и мы не можем сказать, что скрипты из <подставите сюда имя любого дистрибутива> будут работать на LFS. У LFS свой подход к этим скриптам, но они также соответствуют стандартам.
SysVinit (с этого момента мы будем называть его “init”) работает, используя схему уровней запуска. Всего есть семь (от 0 до 6) уровней запуска (точнее, есть больше уровней запуска, но они предназначены для специальных целей и обычно не используются. Документация по init содержит более полную информацию по этому вопросу) и каждый из них сообщает компьютеру, что ему делать при запуске соответствующего уровня. Уровень запуска по умолчанию - 3. Вот описание разных уровней загрузки и их назначение:
0:выключение компьютера
1:однопользовательский режим
2:многопользовательский режим без поддержки сети
3:многопользовательский режим с поддержкой сети
4:зарезервирован или используется как 3
5:тоже самое, что и 4, он обычно используется для графического входа
в систему (например xdm из
X-ов или kdm из KDE)
6:перезагрузка компьютера
Для изменения уровня запуска используется команда init [runlevel]
, где [runlevel]
нужный уровень запуска. Например,
для перезагрузки компьютера можно использовать команду
init 6. Это и делает команда
reboot, а команда
halt является аналогом
init 0.
Есть ряд директорий в /etc/rc.d
, которые выглядят как rc?.d
(где ? является уровнем запуска) и
rcsysinit.d
, которые содержат ряд
символических ссылок. Часть из них начинается с K, другие начинаются с S, затем идут две цифры уровня инициализации.
K означает остановку (kill) сервиса, а S - запуск (start).
Цисло означает порядок, в котором запускаются скрипты, от 00 до 99;
чем меньше номер, тем раньше вызывается скрипт. Когда init переключается
на другой уровень загрузки, одни сервисы останавливаются, другие запускаются.
Сами скрипты расположены в /etc/rc.d/init.d
.
Они проделывают всю работу, а ссылки только указывают на них. Ссылки
остановки и запуска указывают на один и тот же скрипт в /etc/rc.d/init.d
. Это возможно благодаря тому, что скрипты
запукаются с различными параметрами, такими как start
, stop
, restart
, reload
и status
. Когда обрабатывается ссылка К,
то соответствующий скрипт вызывается с аргументом stop
. Если же обрабатывается ссылка S, то скрипт
вызывается с параметром start
.
Но есть одно исключение. Ссылки, начинающиеся с
S в директориях rc0.d
и rc6.d
вызываются только с параметром stop
для остановки чего-либо. Это понятно, потому что когда вы собираетесь
перезагрузить или отключить систему, вам не надо ничего запускать, а
только остановить систему.
Вот описание параметров, которые можно передавать скриптам запуска:
-
start
-
Запуск сервиса.
-
stop
-
Остановка сервиса.
-
restart
-
Сервис останавливается и запускается заново.
-
reload
-
Это команда для обновления настроек сервиса. Она обычно вызывается после изменения конфигурационного файла скрипта, но сервису не нужно перезапускаться.
-
status
-
Показывает, запущен ли сервис и какой у него PID.
Вы спокойно можете настраивать и изменять процесс загрузки (после установки вашей системы LFS). Файлы, описываемые здесь, являются только примерами и, возможно, вы сделаете их лучше.