Linux - статьи

Init


Я расскажу вам только о программе init в стиле ``System V'', которая используется большинством Linux систем. Существуют и другие варианты. На самом деле вы можете поместить любую программу в /sbin/init и ядро запустит её как только закончит загружаться.

Задачей init'а является запуск всего остального нужным образом. Он проверяет состояние файловых систем и монтирует их. Он запускает демонов для записи системных сообщений, сетевого взаимодействия, обслуживания веб-страниц, обработки сообщений мыши и т.п. Он также запускает процессы getty, которые выдают запросы на вход в систему на ваших виртуальных терминалах.

Я мог бы расказать вам длинную историю о проблеме переключения "уровней запуска" (``run-levels''), однако я пропущу большую её часть, остановившись исключительно на моментах связанных с запуском системы.

Init читает файл /etc/inittab, в котором содержатся инструкции для дальнейшей работы. Первой инструкцией, обычно, является запуск скрипта инициализации. Программой, которая будет выполнять (интерпретировать) данный скрипт, является bash, та самая программа, которая предоставляет вам командную строку. В системах, основанных на Debian, скриптом инициализации будет /etc/init.d/rcS, в Red Hat - /etc/rc.d/rc.sysinit. Это то место где происходит проверка и монтирование файловых систем, установка часов системного времени, включение своп-раздела, присвоение имени хоста и т.д.

Далее будет вызван следующий скрипт, который переведёт нас на "уровень запуска" по умолчанию. Это подразумевает просто некоторый набор подсистем, которые должны быть запущены. Для обслуживания уровней запуска существует набор директорий /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.d в Red Hat, или /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d в Debian, которые отвечают за соответствующие уровни. Когда мы заходим на "уровень запуска" 3 в Debian, этот скрипт будет запускать все скрипты в /etc/rc3.d, начинающиеся на букву `S' (старт). Эти скрипты обычно являются символьными ссылками на скрипты расположенные в init.d.


Итак, скрипт "уровня запуска", вызван процессом init и ищет в соответствующей директории скрипты начинающиеся на `S'. Пусть первым обнаруженным файлом окажется S10syslog. Порядок запуска скриптов определяется номерами. В нашем случае S10syslog оказался первым, поскольку не нашлось скриптов, начинающихся на S00 ... S09. На самом деле S10syslog является ссылкой на /etc/init.d/syslog, который и является скриптом, отвечающим за запуск и остановку системного логгера. Поскольку ссылка начинается на `S', скрипт "уровня запуска" запустит syslog с параметром ``start''. Ссылки, названия которых начинаются на `K' (kill, убить) определяют порядок действий при останове системы или при переходе на другой "уровень запуска".

Для изменения списка подсистем, запускаемых по умолчанию, вы должны установить соответствующие ссылки в директории rcN.d, где N - "уровень запуска" по умолчанию, установленный в вашем inittab.

Последним важным действием init является запуск некоторого количества getty. Они прописываются как ``respawned'', что означает - если данный процесс будет остановлен, init запустит его снова. Большинство дистрибутивов используют шесть виртуальных терминалов. Вы можете захотеть уменьшить их количество для экономии памяти, или, наоборот, увеличить, что позволит запускать множество приложений одновременно и быстро переключаться между ними по мере надобности. Также может возникнуть потребность в запуске getty на текстовом терминале или при подключении по модему. В этом случае вам надо будет отредактировать файл inittab.


Содержание раздела