INITTAB(4)

НАЗВАНИЕ
inittab - схема процесса init

ОПИСАНИЕ
Файл /etc/inittab содержит сценарий для исполнения программой init(1M) роли главного диспетчера процессов. Самым заметным из диспетчеризуемых является процесс инициализации терминальных линий /etc/getty. Другие примеры - демоны и shell.

Файл inittab состоит из строк, имеющих следующий формат (важен и порядок строк):


     имя:уровень_выполнения:действие:процесс

Каждая строка оканчивается символом перевода строки, однако его экранирование посредством символа \ позволяет иметь строки продолжения. В любом случае длина строки не должна первышать 512 символов. В поле процесс могут быть включены комментарии согласно правилам shell'а. Комментарии к строкам, ответственным за запуск процесса getty(1M), показываются командой who(1). Предполагается, что в этих комментариях содержится информация о линии, например дислокация соответствующего терминала. На количество строк в файле inittab не наложено никаких ограничений (только на их длину). Поля строк имеют следующий смысл:

имя
Имя, состоящее из одного или двух символов, должно однозначно идентифицировать строку.
уровень_выполнения
Это поле определяет уровень выполнения, при котором строка будет обрабатываться. Уровень выполнения непосредственно соответствует конфигурации процессов в системе. Каждому процессу, запущенному init'ом, присваивается уровень или уровни выполнения, при которых тот может существовать. Уровни выполнения обозначаются цифрами от 0 до 6. Например, если система находится на уровне 1, то будут обработаны только строки, содержащие единицу в поле уровень_выполнения. Когда к init'у обращаются с запросом о смене уровня выполнения, всем процессам, которые не должны существовать на новом уровне, посылается предупреждающий сигнал SIGTERM и дается 20 секунд на завершение, после чего "лишние" процессы принудительно терминируются сигналом SIGKILL. Можно указать несколько допустимых уровней выполнения, если задать ряд цифр из диапазона от 0 до 6. Если уровень_выполнения вообще не указан, то считается, что процесс может выполняться на любом уровне. Существует также три дополнительных значения, a, b и c, которые могут быть указаны в данном поле, хотя они и не являются реальными уровнями выполнения. Строки с такими значениями уровня выполняются только по запросу процесса telinit [см. init(1M)] независимо от текущего уровня выполнения. Отметим, что уровни a, b, c не могут быть установлены, а запрос на выполнение помеченных ими процессов не меняет текущий уровень выполнения. Кроме того, подобные процессы не уничтожаются при смене уровня выполнения. Уничтожаются они, только если соответствующие им строки содержат значение off в поле действие, если эти строки удаляются из файла /etc/inittab, или если init переходит в однопользовательский режим.
действие
Ключевое слово в поле действие определяет дисциплину обработки процесса, указанного в данной строке. Программа init распознает следующие действия:
respawn
Если процесс не существует, то запустить его, не ждать завершения (продолжать просмотр файла inittab), после завершения процесса перезапустить его. Если процесс уже существует, ничего не делать и продолжать просмотр файла inittab.
wait
При переходе на уровень_выполнения, совпадающий с указанным в строке, запустить процесс и ожидать его завершения. При всех последующих просмотрах файла inittab на том же уровне выполнения игнорировать строку.
once
При переходе на уровень_выполнения, совпадающий с указанным в строке, запустить процесс и не ожидать его завершения. Когда процесс завершится, не перезапускать его. Если уровень будет изменен в момент, когда программа еще выполняется из-за предыдущей смены уровня выполнения, то она не перезапускается.
boot
Эта строка будет обработана только один раз во время чтения init'ом файла inittab при начальной загрузке системы. Программа init запускает процесс и не ожидает его завершения. Когда процесс завершится, он не перезапускается. Чтобы это действие выполнялось, поле уровень_выполнения должно быть пустым или соответствовать уровню выполнения процесса init во время загрузки системы. Спецификацией boot помечают функции инициализации, следующие за аппаратной загрузкой системы.
bootwait
Эта строка будет обработана один раз при переходе init из однопользовательского режима в многопользовательский после загрузки системы. (Если действие initdefault соответствует уровню выполнения 2, то указанный в строке процесс будет запущен сразу после загрузки системы). Программа init запускает процесс, дожидается его завершения и после этого не перезапускает процесс.
powerfail
Выполнять указанный в строке процесс только при получении init'ом сигнала об ошибке питания SIGPWR.
powerwait
Выполнять указанный в строке процесс только при получении init'ом сигнала об ошибке питания SIGPWR и продолжать обработку файла inittab лишь после завершения процесса.
off
Если процесс, ассоциированный с данной строкой, выполняется, ему посылается предупреждающий сигнал SIGTERM и дается 20 секунд на завершение, после чего он принудительно терминируется сигналом SIGKILL. Если процесс не существует, строка игнорируется.
ondemand
Это действие является синонимом respawn, но используется только со значениями a, b и c в поле уровень_выполнения.
initdefault
Строка, в которой указано это действие, используется только при первом обращении к процессу init. Она определяет уровень выполнения, устанавливаемый первоначально: выбирается максимальная из цифр, указанных в поле уровень_выполнения. Если поле уровня пусто, оно рассматривается как содержащее 0123456 и, следовательно, устанавливается уровень выполнения 6. Если в файле /etc/inittab нет строки с действием initdefault, то начальное значение уровня выполнения запрашивается у пользователя в момент загрузки системы.
sysinit
Строки этого типа выполняются перед тем, как init попытается получить доступ к консоли (то есть перед выводом приглашения Console login:). Обычно подобные строки используются только для инициализации устройств, с которых init может попытаться запросить уровень выполнения. Команды из этих строк выполняются с ожиданием завершения.
процесс
Это команда shell'а, которую нужно выполнить. Перед содержимым поля вставляется exec и передается shell'у в виде

	sh  -c 'exec процесс'

Тем самым в поле процесс может стоять любая конструкция, синтаксически корректная с точки зрения shell'а. Чтобы употребить комментарий, нужно воспользоваться записью ;#комментарий.

СМ. ТАКЖЕ
exec(2), fork(2), open(2), signal(2).
sh(1), who(1) в Справочнике пользователя.
getty(1M), init(1M) в Справочнике администратора.