состояние выполняющихся в системе серверов не изменяется. Например, если вы запретили запуск
sshd
, работа сервера не завершится. Чтобы это произошло, надо предпринять дополнительные действия, например, вызвать сценарий запуска SysV и передать ему опцию
stop
либо вручную остановить сервер.
Использование
ntsysv
Программа
ntsysv
предоставляет пользователю интерфейс в виде текстового меню и позволяет управлять запуском серверов. Для того чтобы запустить программу, достаточно ввести ее имя, при необходимости можно задать опцию
– level уровни
; в качестве значения опции
– level
указывается один или несколько уровней выполнения, которые вы хотите изменить. Если вы не зададите эту опцию,
ntsysv
изменит только конфигурацию текущего уровня. Внешний вид меню
ntsysv
показан на рис. 4.1.
Рис. 4.1. Программа
ntsysv
предоставляет пользователю простой интерфейс для настройки сценариев SysV
Программа
ntsysv
отображает сведения обо всех серверах, для которых созданы сценарии запуска SysV. Некоторые версии
ntsysv
также выводят данные о серверах, запускаемых с помощью
xinetd
. Для того чтобы разрешить или запретить запуск сервера, надо с помощью клавиш со стрелками выбрать сервер в меню и нажать клавишу пробела. Символ
*
слева от имени сервера указывает на то, что при переходе на данный уровень выполнения сервер будет запущен; отсутствие этого символа означает, что запуск сервера запрещен. После внесения изменений надо с помощью клавиши <Tab> выбрать кнопку OK и нажать клавишу <Enter>; в результате изменения будут сохранены, и выполнение программы завершится.
С помощью
ntsysv
вы можете задавать уровни выполнения, на которых будут работать серверы, запускаемые с помощью суперсервера; данная программа не позволяет лишь изменять уровни выполнения для самого суперсервера. Запрет загрузки сервера не означает, что этот сервер немедленно прекратит работу. Чтобы это произошло, вам надо вручную завершить выполнение сервера либо, если этот сервер запускается посредством суперсервера, перезапустить суперсервер.
Управление уровнями выполнения
В предыдущих разделах постоянно упоминались уровни выполнения, но из сказанного вряд ли стало ясно, что же они собой представляют. Говорилось лишь о том, что уровни выполнения и сценарии запуска 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.