Внутреннее устройство Linux
Шрифт:
примечание
Замешательство может вызвать наличие фиктивных сценариев в каталоге /etc/init.d. Для любой службы команды Upstart здесь может также находиться сценарий для такой службы в стиле System V, однако этот сценарий не делает ничего другого, кроме как сообщает вам о том, что служба была конвертирована в задание команды Upstart. Не будет также ссылки на этот сценарий в каталоге ссылок System V. Если вам встретится фиктивный сценарий, выясните имя задания Upstart, а затем используйте команду initctl для управления этим заданием.
6.6. Команда System V init
Реализация
В типичный состав команды System V init входят два главных компонента: центральный файл конфигурации и большой набор сценариев загрузки системы, дополненный фермой символических ссылок. Все начинается с конфигурационного файла /etc/inittab. Если вы работаете с вариантом System V init, отыщите строку, подобную приведенной ниже, в файле inittab:
id:5:initdefault:
Она сообщает о том, что по умолчанию устанавливается уровень запуска 5.
Все строки файла inittab построены по следующему шаблону, в котором четыре поля отделяются двоеточиями:
• уникальный идентификатор (короткая строка, как id в приведенном примере);
• применимое значение уровня запуска (или несколько значений);
• действие, которое следует выполнить команде init (в приведенном примере — установить по умолчанию значение 5 для уровня запуска);
• команда на выполнение (необязательна).
Чтобы увидеть, как работают команды в файле inittab, рассмотрим следующую строку:
l5:5:wait:/etc/rc.d/rc 5
Эта особая строка важна, поскольку она приводит в действие большую часть системной конфигурации и служб. Здесь действие wait определяет, когда и как команда System V init запускает команду: она должна запустить один раз команду /etc/rc.d/rc 5 при переходе на уровень запуска 5, а затем, прежде чем делать что-либо еще, дождаться завершения ее работы. Чтобы «сократить историю», команда rc 5 выполняет все, что находится в каталоге /etc/rc5.d и начинается с числа (в порядке следования чисел).
Ниже приводится еще несколько распространенных действий из файла inittab в дополнение к initdefault and wait.
Действие respawn
Действие respawn говорит команде init о том, чтобы она запустила следующую дальше команду и, если выполнение команды завершилось, запустила ее снова. Вам, вероятно, встретится подобная строка в файле inittab:
1:2345:respawn:/sbin/mingetty tty1
Утилиты getty обеспечивают приглашение на вход. Приведенная выше строка используется для первой виртуальной консоли (/dev/tty1), которую вы видите, когда нажимаете сочетание клавиш Alt+F1 или Ctrl+Alt+F1 (см. подраздел 3.4.4). Действие respawn заново выводит приглашение на вход, когда вы выйдете из системы.
Действие ctrlaltdel
Действие ctrlaltdel
Действие sysinit
Действие sysinit команда должна выполнить в самую первую очередь, перед переходом на какой-либо из уровней запуска.
примечание
О других доступных действиях можно узнать на странице руководства inittab(5).
6.6.1. Команда System V init: командная последовательность запуска
Теперь вы готовы узнать, как команда System V init запускает системные службы, прежде чем она позволяет вам войти в систему. Вспомните приведенную выше строку из файла inittab:
l5:5:wait:/etc/rc.d/rc 5
Эта небольшая строка приводит в действие множество других команд. На самом деле символы rc являются сокращением от run commands (запустить команды), под которыми многие подразумевают сценарии, программы и службы. Но где расположены эти команды?
Число 5 в этой строке сообщает о том, что речь идет об уровне запуска 5. Вероятно, команды будут находиться в каталоге /etc/rc.d/rc5.d или /etc/rc5.d. Уровень запуска 1 использует каталог rc1.d, уровень запуска 2 — rc2.d и т. д. Например, вы можете встретить подобные файлы в каталоге rc5.d:
S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron
Команда rc 5 запускает утилиты из каталога rc5.d, выполняя команды в такой последовательности:
S10sysklogd start
S12kerneld start
S15netstd_init start
S18netbase start
—snip—
S99sshd start
Обратите внимание на аргумент start в каждой команде. Прописная буква S в имени команды означает, что данная команда должна работать в режиме запуска, а число (от 00 до 00) определяет местоположение команды rc в последовательности команд. Команды из каталогов rc*.d обычно являются сценариями оболочки, запускающими команды из каталога /sbin или /usr/sbin.
Обычно можно выяснить, что делает конкретная команда, просмотрев ее сценарий с помощью команды less или аналогичной ей.
примечание
Некоторые каталоги rc*.d содержат команды, которые начинаются с символа K (для режима останова). В таком случае команда rc запускает команду с аргументом stop вместо аргумента start. Чаще всего команды с символом K будут встречаться вам на уровнях запуска, отвечающих за выключение системы.
Такие команды можно запускать вручную. Однако обычно это осуществляется не с помощью каталогов rc*.d, а с использованием каталога init.d, о котором речь пойдет ниже.