Другие сервисы. Уровни запуска.
Метки: SuSE | xinetd
Среда, 6 мая 2009 г.
Просмотров: 3400
Другие сервисы.
He все сервисы могут запускаться с помощью суперсервера (xinetd/inetd). Отдельные сервисы запускаются независимо - в так называемом автономном (standalone) режиме. Чтобы включить/выключить такие сервисы, необходимо знать, как работать с инициализационными сценариями системы. В дистрибутивах, использующих систему инициализации System V, всякий сервис контролируется отдельным сценарием. Например, сценарий random, скопированный с Mandrake-машины: этот сценарий управляет запуском и остановом генератора случайных чисел.
# random Script to snapshot random state and reload it at
# boot time. #
# Author: Theodore Ts'o <tytso@mit.edu> #
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for
# higher quality \ random number generation.
. /etc/init.d/functions random_seed=/var/lib/random-seed
# Обработка параметров
case "$1" in
start) #start - параметр, использующийся для запуска сервиса if [ -f $random_seed ]; then
cat $random_seed >/dev/urandom else
touch $random_seed fi
action "Initializing random number generator: " /bin/true chmod 600 $random_seed
dd if=/dev/urandom of=$random_seed count=l bs=512 2>/dev/null touch /var/lock/subsys/random
stop)
# stop - параметр для останова сервиса
touch $random_seed
chmod 600 $random_seed
action "Saving random seed: " dd if=/dev/urandom of=$random_seed count=l bs=512 2>/dev/null
rm -f /var/lock/subsys/random
status)
# status - выводит информацию о работе сервиса
if [ -с /dev/random ] ; then
gprintf "The random data source exists\n" else
gprintf "The random data source is missing\n" fi
r f
restart|reload)
# ничего не делает - в перезагрузке нет смысла
г г
*)
# действие по умолчанию - выводим, как нужно использовать
#сценарий
gprintf "Usage: %s\n" "$(basename $0) {start|stop|stat us|restart|reload}"
exit 1 esac
exit 0
Для запуска сервиса нужно выполнить команду:
Для останова:
Для вывода статуса сервиса используется команда:
Некоторые дистрибутивы, например, Red Hat, Mandrake и SuSe, поддерживают команду service, что делает запуск и останов сервиса еще проще, к примеру, команда:
эквивалентна команде:
Уровни запуска и инициализационные сценарии.
Известно, как запускать и останавливать сервисы, однако делать это при каждой загрузке системы довольно утомительно. Linux может запускаться на разных уровнях запуска (к справке, останов системы - это шестой уровень): к примеру, на третьем уровне (многопользовательский режим с поддержкой сети) или на пятом (то же, что и 3-й, но с автоматическим запуском X Window). Перейти на надобный уровень принудительно можно, выполнив команду init n, где n - номер уровня запуска. Номер уровня запуска по умолчанию задан в файле /etc/inittab.
Переходим в каталог /etc/rc.d. В нем подкаталоги rcN.d (N - номер уровня). В каждом каталоге размещены ссылки на сценарии запуска сервисов, которые должны запускаться на этом уровне. Сами же сценарии находятся в каталоге /etc/rc.d/init.d/.
Ссылки на сценарий запуска - это обыкновенные символические ссылки, но с необычными именами. Формат имени ссылки следующий: <S|К>NNимя. Символы S и К определяют, что нужно сделать с сервисом: S - запустить (start), К - убить (kill).
На шестом уровне (останов системы) все ссылки идут в формате КNNимя. NN - это порядковый номер запуска сервиса. То есть если есть три сервиса с номерами 10, 20 и 30 (ссылки S1Oservice1, S20service2, S30service3), то вначале будет запущен главнейший сервис (service1), позже - второстепенный, а после - третий.
Чтобы отключить запуск сервиса, нужно прямо удалить соответствующую символическую ссылку. Нужно убедиться, что ссылка удалена из нужного каталога: может случиться, что система запускается на третьем уровне, а ссылка удалена на сервис с пятого уровня (из каталога rс05.d) - но на третьем уровне сервис будет все еще запускаться.
Такой подход крайне не удобен. Все нужно делать вручную. В дистрибутивах Red Hat и Suse есть утилита chkconfig, позволяющая автоматизировать этот процесс. Параметр -list этой утилиты позволяет вывести все самостоятельные и xinetd-сервисы, которые запускаются на разных уровнях:
privoxy 0:выкл 1:выкл 2:вкл 3:выкл 4:вкл 5:вкл 6:выкл
clamd 0:выкл 1:выкл 2:выкл 3:выкл 4:выкл 5:выкл 6:выкл
freshclam 0:выкл 1:выкл 2:выкл 3:выкл 4:выкл 5:выкл 6:выкл
сервисы на основе xinetd:
chargen-udp: выкл
chargen: выкл
daytime-udp: выкл
daytime: выкл
echo-udp: выкл
echo: выкл
Вывод программы немножко сокращен, но его хватит, чтобы понять, что выводит программа chkconfig. Вначале выводятся самостоятельные сервисы. В первой колонке указывается название сервиса, после этого список состояний сервиса на разных уровнях в формате <Non|off>, где N - это номер уровня, a on или off- признак того, что сервис включен (on) или выключен (off). Сервис clamd выключен на всех уровнях запуска, а сервис pptpd работает только на уровнях 4-6.
После списка автономных сервисов выводятся Xinetd-сервисы. Тут все просто: сервис либо отключен (off), либо включен (on).
Для отключения сервиса нужно просто указать его имя и опцию --del:
Данная команда удалит сервис из списка загрузки, но не остановит его. Для останова нужно дополнительно ввести команду service nfs stop.
Если дистрибутив использует BSD-систему инициализации, процесс отключения сервисов еще проще. В каталоге /etc/rc.d будет серия файлов - rc.inetl, rc.inet2, например, для инициализации всей сети и Интернета. Чтобы отключить сервис NFS и связанные с ним RPC-cepвисы, нужнозакомментировать строки запуска сервиса NFS в файле /etc/rc.d/rc.inet2:
# you'll need to load the knfsd module for kernel NFS server
# support
# You'll also need to set up some shares in /etc/exports.
# Starting the NFS server:
if [ -x /etc/rc.d/rc.nfsd ]; then
/etc/ rc.d/rc.nfsd start fi
# Done starting the NFS server