Управление уровнями выполнения
Управление уровнями выполнения
В предыдущих разделах постоянно упоминались уровни выполнения, но из сказанного вряд ли стало ясно, что же они собой представляют. Говорилось лишь о том, что уровни выполнения и сценарии запуска SysV тесно связаны между собой. При загрузке компьютер переходит на некоторый уровень выполнения. Этому уровню соответствует каталог ссылок SysV; содержащиеся в нем ссылки указывают на сценарии запуска. Если ссылка начинается с символа "S" Linux при вызове сценария передает ему параметр start, а если имя ссылки начинается с "K", сценарию передается параметр stop.
Но как Linux узнает, на какой уровень следует перейти после загрузки? Информация об этом хранится в файле /etc/inittab, который выполняет роль конфигурационного файла для init — первого процесса, выполняющегося в системе. Процесс init является родительским для всех остальных процессов в системе. В файле /etc/inittab содержатся записи наподобие приведенной ниже.
id:5:initdefault:
Ключевое слово id, расположенное в начале, идентифицирует данную строку, а число, следующее за ним (в данном случае 5), устанавливает постоянный уровень выполнения. Если вы измените это значение и перезагрузите компьютер, система будет работать на другом уровне. Уровни 0, 1 и 6 имеют специальное назначение. Уровень 0 соответствует завершению работы системы, уровень 1 — однопользовательскому режиму, а уровень 6 — перезагрузке системы. Уровни 2–5 задают нормальные режимы работы; назначение каждого из уровней может изменяться в зависимости от версии системы. В Caldera, Red Hat Mandrake SuSE7.3 и TurboLinux уровень 3 соответствует обычному текстовому режиму (система X Window не запускается), а уровень 5 поддерживает графический пользовательский интерфейс (система X Window запущена). В ранних версиях SuSE вместо уровней 3 и 5 для поддержки текстового режима и графического интерфейса используются уровни 2 и 3, а в Slackware для той же цели применяются уровни 3 и 4. По умолчанию в Debian на уровнях 2–5 набор серверов, запускаемых посредством сценариев SysV, существенно не отличается, но на уровнях выше третьего используется меньшее число инструментов с текстовым интерфейсом (детали настройки системы можно выяснить, просмотрев содержимое файла /etc/inittab). В большинстве систем файл /etc/inittab содержит подробные комментарии, которые описывают функциональные возможности каждого из уровней. Если вы используете версию системы, которая не обсуждается в данной книге, или если вам нужна дополнительная информация о работе системы на различных уровнях, вы можете получить требуемые сведения, просмотрев комментарии в этом файле.
Внимание
Не устанавливайте в качестве уровня по умолчанию уровень 0 или 6. Если вы поступите так, то сразу после загрузки работа системы будет завершена либо компьютер начнет перезагружаться. Для того чтобы изменить настройку, вам придется загрузить компьютер с другого диска.
Если вы хотите временно изменить уровень выполнения, сделайте это с помощью команды telinit (в некоторых системах для этого приходится вызывать init). Синтаксис telinit имеет следующий вид:
telinit [-t время_в_секундах] [уровень]
При изменении уровня выполнения некоторые процессы могут быть завершены. Для завершения процесса Linux передает ему сигнал SIGTERM либо SIGKILL. Сигнал SIGTERM обеспечивает более "мягкий" режим окончания работы; при этом программа получает возможность закрыть файлы и освободить другие ресурсы. SIGKILL принудительно завершает выполнение программы, в результате файлы, используемые в процессе его работы, могут быть повреждены. При изменении уровня выполнения telinit сначала пытается использовать SIGTERM. Если процесс продолжает выполняться, то через пять секунд telinit передает ему сигнал SIGKILL. Опция -t позволяет изменить этот интервал. В большинстве случаев значение, равное пяти секундам, вполне приемлемо.
Второй параметр, передаваемый telinit, задает уровень выполнения. Для указания уровня используется один символ. Результаты, которые вы получите, задавая в качестве этого параметра число, очевидны. Кроме того, вы можете передать программе другие символы. Их назначение описано ниже.
• а, b или с. Некоторые записи в файле /etc/inittab идентифицируются с помощью символов a, b и с. Эти символы имеют специальное назначение. Если вы передадите один из них telinit, программа будет обрабатывать соответствующие ему записи /etc/inittab; при этом уровень выполнения системы не изменится.
• Q или q. Если задать одно из этих значений как уровень выполнения, telinit повторно считает содержимое файла /etc/inittab и продолжит работу с учетом внесенных изменений.
• S, или s. Эта опция переводит систему в однопользовательский режим.
• U, или u. Данная опция вызывает перезагрузку процесса init; при этом новое содержимое файла /etc/inittab не считывается.
Зачем может понадобиться переходить на другой уровень выполнения? Изменяя уровень выполнения по умолчанию, вы можете изменять набор серверов, работающих в системе. В большинстве дистрибутивных пакетов самым важным считается сервер X Window. Одна из последних записей в файле /etc/inittab управляет запуском этого сервера; в некоторых системах эта задача решается с помощью сценариев запуска SysV. Изменение уровня выполнения позволяет быстро перейти от одного набора сервера к другому, разрешить или запретить графический режим или временно отключить X Window.