Литмир - Электронная Библиотека

Методика создания каталогов конфигурации уровня выполнения позволяет автоматизировать работу сценариев rc.scripts только при изменении уровня выполнения. Однако нельзя определить, запущены или остановлены все необходимые службы на уровне выполнения. Эта часть работы должна выполняться shell–программистом.

Уровни выполнения можно настраивать в соответствии с действительно выполняемыми службами, но данная тема в книге не рассматривается.

28.1. Определение наличия каталогов уровня выполнения

Каталоги, где хранятся сценарии rc.scripts (здесь фактически речь идет о ссылках, которые мы рассмотрим далее), имеют следующий вид:

/etc/rcN.d

или

/etc/rc.d/rcN.d

где N — число. Обычно это число равно семи, поскольку каталоги rcN. d нумеруются от 0 до 6. Однако в системе можно иметь несколько дополнительных каталогов типа rcS.d. Количество каталогов не столь важно; все рассматриваемые каталоги перечислены ниже.

$ pwd

/etc

$ ls -l

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rc0.d

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rc1.d

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rc2.d

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rc3.d

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rc4.d

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rc5.d

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rc6.d

drwxr‑xr‑x

2

root

sys

1024

Dec

22

1996

rcS.d

В Linux…

$ pwd

/etc/rc.d

$ ls

init.d rc.local rc0.d rc2.d rc4.d rc6.d

rc rc.sysinit rc1.d rc3.d rc5.d

Если команда cd применяется в одном из каталогов rcN.d, можно просмотреть и другие сценарии rc.scripts, связанные с этими каталогами.

$ pwd

/etc/rc.d/rc2.d

$ ls -1

lrwxrwxrwx

1

root

root

16

Dec 3

15:16

K87ypbind -> ../init.d/yd

lrwxrwxrwx

1

root

root

17

Dec 3

15:10

K89portmap -> ../init.d/p

lrwxrwxrwx

1

root

root

17

Dec 3

15:07

S01kerneld -> ../init.d/d

28.2. Уточнение текущего уровня выполнения

В этой главе не рассматриваются вопросы системного администрирования, однако shell–программист должен знать не только принципы функционирования сценариев rc.scripts, но также принципы их совмещения с каталогами конфигурации уровня выполнения. Для уточнения уровня выполнения примените команду:

$ who -r

run‑level 4 Apr 22 13:26 4 0 3

Число, расположенное после слов "run‑level" является текущим уровнем выполнения. Следующие за ним данные определяют время выполнения последней перезагрузки системы.

В Linux…

$ runlevel 2 3

В первом столбце указан уровень, на котором система находилась на предварительном этапе, а во втором столбце — текущий уровень, который в данном случае равен 3.

28.3. Ускорение работы с помощью файла inittab

Каталог уровня выполнения состоит из набора сценариев, более совершенных, чем службы. Слово "services" в этом контексте означает и демон, и приложение, и серверы, и подсистемы или процессы сценария. Во время загрузки системы вызывается процесс init (этот процесс является родоначальником всех остальных процессов). Одной из задач упомянутого процесса является определение запускаемых служб, а также определение уровня выполнения, заданного по умолчанию. Эти сведения можно получить, просматривая текстовый файл конфигурации под названием inittab, размещенный в каталоге /etc. Процесс init также использует этот файл для получения указаний по поводу загрузки определенных процессов. Если необходимо изменить этот файл, сначала создайте резервную копию. В случае повреждения файла или возникновения ошибок, приводящих к "деградации" системы, система не будет загружаться обычным образом; вам придется загружаться в однопользовательском режиме и устранять повреждения в файле.

Файл inittab включает поля, имеющие весьма лимитированный формат. Формат файла будет следующий:

id:rstart:action:process

Поле id имеет уникальное название, которое идентифицирует запись процесса,

Поле rstart содержит число, которое указывает, на каком уровне выполнения запускается процесс.

Поле action указывает процессу init, как рассматривать текущий процесс. Существует большое количество названий для поля action, но наиболее распространенными являются wait и respawn. Название wait означает, что начавшийся процесс ожидает завершения. Название respawn означает, что процесс начинается даже в том случае, если он еще не существует. Если же существует, то запускается заново в тот момент, когда он уже завершается.

Поле process содержит действительную команду для выполнения. Ниже приводится фрагмент файла inittab.

$ pg /etc/inittab

id:3:initdefault:

# Инициализация системы.

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

уровень выполнения 0 10:0:wait:/etc/rc.d/rc 0

уровень выполнения 1 11:1:wait:/etc/rc.d/rc 1

уровень выполнения 2 12:2:wait:/etc/rc.d/rc 2

уровень выполнения 3 13:3:wait:/etc/rc.d/rc 3

уровень выполнения 4 14:4:wait:/etc/rc.d/rc 4

уровень выполнения 5 15:5:wait:/etc/rc.d/rc 5

уровень выполнения 6 16:6:wait:/etc/rc.d/rc 6

Выполнение gettys на стандартных уровнях выполнения

1:12345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:234 5:respawn:/sbin/mingetty tty4

5:234 5:respawn:/sbin/mingetty tty0

6:2345:respawn:/sbin/mingetty ttyS1 vt100

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

Строки, которые начинаются числами 10—16, определяют запуск или прекращают выполнение сценариев уровней выполнения для определенных уровней выполнения. Например, рассмотрим следующую строку:

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

В строке содержится следующая информация: если пользователь находится на уровне выполнения 5, сценарий /etc/rc.d/rc запускается с параметром 5. Это означает, что сценарий /etc/rc.d/rc выполняет все сценарии в каталоге /etc/rc.d/rc/rc5.d.

Последняя строка файла — уровни выполнения 2, 3, 4 и 5 -cвидетельствует о том, что процесс заново возрождается. То есть, процесс никогда не уничтожится (ну, по крайней мере, в течение одной секунды). Непрерывно отвергается процесс mingetty для последовательного порта tty$1. В данном случае в роли параметра используется ID терминала, который имеет значение vt100.

28.4. Переходим к уровням выполнения

Одной из последних задач процесса init, которая реализуется перед тем, как система "полностью запустится", является выполнение всех сценариев для уровня выполнения, заданного по умолчанию. Файл, осуществляющий эту задачу, называется либо /etc/rc.d/rc, либо /etc/rc.init. Роль этого сценария заключается в первоначальном уничтожении процессов для этого уровня, а затем — в установке процессов данного уровня.

100
{"b":"273485","o":1}