Linux From Scratch. Версия 6.0

Глава 7. Установка системных скриптов загрузки

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). Файлы, описываемые здесь, являются только примерами и, возможно, Вы сделаете их лучше.