И переход на заданный уровень исполнения

Нормальный ход загрузки GNU/Linux предусматривает запуск процесса

/sbin/init после завершения загрузки и инициализации ядра. Процесс init имеет PID = 1 и запускает разные системные службы. Процесс init также порождает серверы терминалов getty (или им подобные), которые выводят на терминал приглашение login: и передают управление команде /bin/login при попытке входа в сеанс.

В GNU/Linux-системах имеется конфигурационный файл, задающий поведе- ние процесса init при загрузке системы — это файл /etc/inittab. Для разно- видностей GNU/Linux, следующих спецификации System V, определяется понятие уровней исполнения (runlevels). Уровень исполнения — это вариант работы операционной системы, определяющийся конкретным набором про- грамм, запускающимся на нем.

В Red Hat, Novell SUSE и подобных ОС определены следующие уровни ис- полнения:

r 0 — останов системы (halt);

r 1 — административный однопользовательский режим (single user mode);

r 2 — многопользовательский режим без поддержки файловой системы NFS;

r 3 — стандартный многопользовательский режим (multiuser);


 

r 4 — не используется;

r 5 — многопользовательский режим с запуском X-сервера;

r 6 — перезагрузка (reboot).

Часто определяется уровень исполнения для однопользовательского режи- ма — S.

В некоторых GNU/Linux-системах используется система инициализации, следующая стилю BSD или подобная ему. Например, в Slackware используется BSD-подобная система инициализации, где определены только останов, пере- загрузка системы, однопользовательский режим и многопользовательский режим, а уровней исполнения в обычном понимании нет. В Gentoo Linux при- меняется оригинальная система инициализации, напоминающая BSD, на которой определены такие режимы работы, как boot и default, а обычных уровней исполнения нет.

Дальнейшее изложение относится лишь к системам GNU/Linux, следующим

System V-спецификации процесса инициализации операционной системы.

Процесс init запускает процессы инициализации системы, основываясь на конфигурационных командах в файле /etc/inittab. Формат записей в файле

/etc/inittab следующий: id:runlevels:action:process, где:

r id — уникальный идентификатор записи в файле /etc/inittab, состоящий из

1—4 символов (для старых систем — не более 2-х);

r runlevels — уровни исполнения, на которых выполняется действие;

r action — действие, которое должно быть выполнено;

r process — процесс, который должен быть запущен.

Далее приводится список распространенных действий в /etc/inittab:

r initdefault — строка определяет уровень исполнения по умолчанию;

r sysinit — процесс должен быть запущен единожды при инициализации операционной системы до запуска любых других процессов (не считая, естественно, самого процесса init);

r wait — процесс должен быть запущен при переходе на данный уровень исполнения, причем процесс init, породивший данный процесс, должен дождаться завершения этого процесса перед переходом к следующим дей- ствиям;

r ctrlaltdel — процесс, который должен быть запущен при нажатии в сис- темной консоли комбинации клавиш <Ctrl>+<Alt>+<Del>;

r powerfail — задает процесс, который должен быть запущен при получе- нии от системы управления питанием сигнала об отсутствии питания;


 

r powerokwait — задает процесс, запускаемый init при возобновлении пи- тания;

r respawn — процесс должен быть запущен заново, если он остановился. Обсудим важнейшие фрагменты файла /etc/inittab.

Сначала рассмотрим пример 13.1.

 

Пример 13.1. Уровень исполнения по умолчанию

 

id:5:initdefault:

 

Эта строка определяет уровень выполнения по умолчанию — здесь 5-й, т. е. многопользовательский с запуском X-сервера.

В строке, приведенной в примере 13.2, задается выполнение сценария

/etc/rc.d/rc.sysinit при инициализации системы перед запуском других про- цессов.

 

Пример 13.2. Скрипт первичной инициализации системы

 

si::sysinit:/etc/rc.d/rc.sysinit

 

Блок настроек, показанных в примере 13.3, определяет поведение системы при переходе на заданный уровень выполнения.

 

Пример 13.3. Скрипты перехода на заданный уровень исполнения

 

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

 

Идея проста: при переходе на уровень исполнения с заданным номером (0—

6) происходит вызов сценария /etc/rc.d/rc, которому в качестве аргумента подставляется цифра — номер требуемого уровня исполнения. Уровень ис- полнения, на котором работает каждая строка, задается во втором поле запи- сей. Дальнейшая инициализация, выполняемая на данном уровне исполне- ния, производится сценарием /etc/rc.d/rc.


 

В примере 13.4 показана строка настройки для запуска программы getty, вы- водящей приглашение на вход в сеанс login: и ожидающей попытки входа.

 

Пример 13.4. Запуск сервера терминала

 

1:2345:respawn:/sbin/mingetty tty1

 

Данная строка распространяется на уровни исполнения со 2-го по 5-й и не действует на однопользовательский режим. Обратите внимание, что метка представлена одной цифрой, совпадающей с номером терминала, на котором запущена программа mingetty. Фактически количество доступных виртуаль- ных консолей в системе определяется количеством этих строк в файле

/etc/inittab.

Если в файле /etc/inittab произведены изменения, то они вступят в силу либо после перезагрузки системы, либо после команды /sbin/init q. Еще один способ сделать это — передать процессу init (PID = 1) сигнал SIGHUP.

Итак, при переходе на требуемый уровень исполнения в Red Hat срабатывает сценарий /etc/rc.d/rc, деятельность которого ограничивается запуском сцена- риев в каталогах с именами вида: /etc/rc.d/rc#.d.

В системах System V каталога /etc/rc.d нет и имена каталогов инициализации имеют вид: /etc/rc#.d, где вместо знака решетки подставляется номер требуе- мого уровня исполнения, например, каталог /etc/rc2.d соответствует 2-му уровню исполнения.

Если выполнить команду ls -l /etc/rc3.d, то можно убедиться, что содер- жащиеся в нем файлы представляют собой символические ссылки на файлы инициализационных сценариев, находящиеся в каталоге /etc/init.d.

Имена файлов — символических ссылок формируются следующим образом:

1. Сначала устанавливается либо буква S для сценариев, запускающих неко- торую службу, или буква K для сценариев, останавливающих какую-либо службу (все имена файлов, начинающихся с чего-либо другого, игнори- руются).

2. Далее следует порядковый номер запуска сценария, предназначенный для упорядочивания процесса запуска и останова служб.

3. Завершается имя ссылки строкой — именем (условным) службы.

Итак, все ссылки, имена которых начинаются с S (start), запускают что-либо, а ссылки, имена которых начинаются с K (kill), — останавливают. Порядко- вые номера предотвращают несвоевременные попытки запуска каких-либо сервисов. Например, служба электронной почты запускается ссылкой S80sendmail после инициализации сети ссылкой S10network.


 

Например, для инициализации сетевых интерфейсов следует набрать коман- ду, показанную в примере 13.5.

 

Пример 13.5. Запуск сценария инициализации сетевого интерфейса

 

/etc/init.d/network start

 

Сценарий /etc/rc.d/rc, перебирая файлы символических ссылок в каталогах инициализации, для всех символических ссылок, имена которых начинаются с S, добавляют через пробел к имени ссылки слово start, запуская так служ- бы. А для ссылок с именами, начинающимися с K, — слово stop.

В Red Hat и подобных системах запуск и останов служб удобно выполнять с помощью команды /sbin/service (пример 13.6).

 

Пример 13.6. Запуск служб в Red Hat

 

service network start

 

Эта команда инициализирует сетевой интерфейс.

Таким образом, для того чтобы некоторая служба автоматически запускалась на заданном уровне исполнения, требуется иметь сценарий инициализации этой службы (желательно поместить его в стандартном каталоге /etc/init.d) и символические ссылки, размещаемые в каталогах /etc/rc#.d, где вместо ре- шетки следует подставить требуемые уровни исполнения.

В Red Hat, SUSE и подобных системах удобно пользоваться командой chkconfig, позволяющей настроить поведение сценариев инициализации на разных уровнях исполнения. Приведенная в примере 13.7 команда отобразит все сценарии запуска служб и уровни выполнения, на которых они запуска- ются.

 

Пример 13.7. Получение таблицы запуска служб

 

chkconfig ––list

 

Для добавления службы в список автоматического запуска надо вызвать команду chkconfig с опцией ––add, а для удаления службы — с опцией

––del. Для определения уровней исполнения, на которых будет работать тре- буемый сценарий, необходимо использовать опцию ––level. Команда в при- мере 13.8 определяет, что сетевой интерфейс должен работать на 2, 3, 4 и 5-м уровнях исполнения.


 

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

 

chkconfig ––level 2345 network on

 

В Ubuntu имеется аналогичная chkconfig утилита sysv-rc-conf, обладающая удобными интерактивными возможностями.

Команда runlevel показывает текущий уровень исполнения (пример 13.9).

 

Пример 13.9. Определение уровня исполнения

 

# runlevel N 5

 

Команда runlevel выводит два значения — предыдущий уровень исполне- ния (в примере он неизвестен — N) и текущий (здесь — 5).

Перейти на другой уровень исполнения можно с помощью команды

/sbin/init (пример 13.10).

 

Пример 13.10. Переход в однопользовательский режим

 

/sbin/init 1








Дата добавления: 2015-06-12; просмотров: 982;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.026 сек.