Linux: Полное руководство
Шрифт:
В списке текущих процессов, который вы видели по команде
Ядро монтирует корневую файловую систему в режиме «только чтение», находит исполняемый файл демона init (в каталоге
Ядро покорно запустит в качестве первопроцесса любую программу, которую вы укажете ему как init:
Конечно, оболочка sh не запустит других процессов, но она предоставит вам интерфейс командной строки, в которой вы сможете выполнить необходимые ремонтные работы.
Процесс init прочитывает свой конфигурационный файл
Уровень выполнения (runlevel) — это такой режим работы системы, в котором разрешается существование только определенной группы процессов. В каждый момент времени система находится на одном из уровней выполнения (на каком именно, можно узнать по команде
Разрешенные на каждом уровне процессы указаны в файле
♦ семь уровней выполнения, обозначаемых номерами с 0 до 6;
♦ особый уровень S или s — однопользовательский;
♦ уровни по требованию (ondemand) А, В и С — фиктивные: при переходе на эти уровни запускаются приписанные к ним процессы, но текущий уровень выполнения не меняется.
Термин «уровень выполнения» унаследован от тех времен, когда система была обязана проходить уровни последовательно, от низшего к высшему при загрузке и обратно при выключении. Сейчас их можно переключать в любом порядке. Для переключения на уровень n нужно от имени суперпользователя ввести команду
Эта команда посылает соответствующий сигнал процессу init (tell init). Ее исполняемый файл представляет собой символическую ссылку на
Запустив все процессы, приписанные к текущему уровню выполнения, init засыпает до получения сигнала о завершении дочернего процесса, отключении питания или требовании переключить уровень. Тогда он просыпается, перечитывает свой конфигурационный файл и, если нужно, выполняет записанные в нем инструкции. Чтобы заставить его перечитать измененный вами
Важно понять, что уровень выполнения — это программная абстракция, аппаратура ни о каких уровнях не знает. Поэтому в разных реализациях Linux (разных дистрибутивах) одному уровню могут соответствовать разные конфигурации системы. Следующие уровни используются в дистрибутивах, основанных на Red Hat:
♦ 0: Останов системы.
♦ 1: Однопользовательский режим. То же, что уровень S.
♦ 2: Многопользовательский режим без поддержки сети.
♦ 3: Полный многопользовательский режим.
♦ 4: Не используется.
♦ 5: Графический режим с X11.
♦ 6: Перезагрузка.
В однопользовательском режиме никакие службы не стартуют: только грузится ядро, монтируется корневая файловая система и запускается командный интерпретатор. На этом уровне не нужен даже файл
Неиспользуемые уровни можно занять под свою собственную конфигурацию служб, собранных для конкретной задачи.
Первая незакомментированная строка этого файла определяет уровень выполнения по умолчанию, то есть тот, в котором стартует система, если в процессе загрузки ядру не указано иначе. Эта строка выглядит как
Обычно в качестве уровня по умолчанию выбирают 3 (полнофункциональный многопользовательский текстовый режим) или графический 5 (запускается X Window и выдается графическое приглашение для входа в систему). Если оставить поле уровня пустым, то init переспросит значение в процессе загрузки. Если указать в поле уровня несколько значений, то сработает наибольшее. Уровни 0 (останов) и 6 (перезагрузка) указывать нельзя.
Следующие строки имеют формат:
♦ Идентификатор — это уникальная последовательность из четырех символов (в старых дистрибутивах — двух).
♦ Уровни_выполнения: перечень уровней выполнения (номера без каких-либо разделителей), для которых будет выполнено указанное действие. Например, значение 2345 требует выполнить действие на уровнях 2, 3, 4 и 5. Здесь можно указывать также уровни по требованию (ondemand) А, В и С.
♦ Действие: одно из действий, перечисленных в таблице 9.1.
♦ Запускаемый_процесс: процесс, над которым производится действие. Это может быть исполняемый файл или сценарий.
Действия над процессами, задаваемые а файле /etc/inittab Таблица 9.1
| Действие | Описание |
|---|---|
| respawn | В случае завершения процесс будет перезапущен |
| wait | Процесс будет запущен при переключении на любой из указанных уровней, и init будет ждать его завершения |
| once | При переключении на любой из указанных уровней процесс будет запущен только однажды |
| boot | Процесс будет запущен во время загрузки системы. Поле «уровни_выполнения» игнорируется |
| bootwait | То же, что и boot, но init ждет завершения процесса |
| off | Не выполняет никаких действий |
| ondemand | Процесс выполняется в режиме по требованию, то есть, он будет запущен при переключении на уровни a, b или с |
| initdefault | Определяет уровень выполнения по умолчанию |
| sysinit | Процесс запускается во время загрузки системы до любых процессов, стартующих через boot или bootwait |
| powerwait | Процесс будет запущен, когда исчезнет напряжение в сети. Естественно, для корректной работы этой записи нужен источник бесперебойного питания, от которого система и получит уведомление об исчезновении напряжения; init будет ждать завершения этого процесса |
| powerfail | То же, что и powerwait, но init не будет ждать завершения процесса |
| powerokwait | Процесс запускается по получении init сигнала о восстановлении питания |
| powerfailnow | Процесс запускается, когда источник бесперебойного питания подает сигнал о том. что его батареи почти разряжены |
| ctrlaltdel | Процесс запускается при получении init сигнала INT. посланного нажатием комбинации клавиш Ctrl+Alt+Del. Обычно это процесс перезагрузки, выключения или перехода в однопользовательский режим. |
| kbrequest | Процесс запускается при получении init сигнала, посланного нажатием «специальной» комбинации клавиш. Назначить клавишам специальное значение можно с помощью утилит из пакета kbd |