Cтартовые сценарии осуществляют запуск и останов системных служб — программ,
предоставляющих различные “услуги” (сервисы)
пользователям системы. В качестве примера системных служб можно привести
syslog
— службу инициализации
системного журнала или network
— службу
инициализации сети.
Для управления списком служб, которые должны запускаться при старте системы (а точнее —
при её загрузке на том или ином уровне выполненения), используется команда chkconfig
вида chkconfig имя_службы
команда. Например, командой
chkconfig sendmail
on запускается почтовый сервер, осуществляющий
отправление и достаку почты по протоколу SMTP, Более подробно работа команды
chkconfig рассмотрена ниже.
Для запуска, перезапуска или останова служб в процессе работы
применяется утилита service. Её общий вид
следующий: service
имя_службы
{start|stop|reload|restart|status}. Например,
если понадобилось перезапустить службу системного журнала, это
можно сделать следующим образом:
# service syslogd restart Stopping system logger service: [ DONE ] Starting system logger service: [ DONE ]
Обратите внимание, что для управления службами необходимы права суперпользователя.
Управление системными службами при помощи утилит chkconfig и service — наиболее простой в повседневной работе вариант. Далее речь пойдет о более сложном и универсальном способе — работе со стартовыми сценариями.
Стартовые сценарии ALT Linux устроены примерно так же, как в
RedHat Linux
, по простой “.d”-схеме. Суть её в
следующем. Любое атомарное действие по изменению способностей
системы — запуск и останов определённой службы,
автоматическое изменение или сохранение настроек и т. п. —
оформляется в виде командного сценария в каталоге
/etc/rc.d/init.d
. К такому сценарию
предъявляются определённые требования: как минимум, он должен
распознавать в качестве первого параметра слова
start
и stop
. Будучи
запущен с параметром start
, этот сценарий
выполняет действия по запуску службы или активации настроек, а с
параметром stop
он останавливает службу или
записывает активные настройки в файл.
Когда система загружается, процесс init
выполняет сначала сценарий
/etc/rc.d/rc.sysinit
, а затем —
/etc/rc.d/rc
,
где номер
номер
соответствует
уровню выполнения (профилю использования
системы, обычно он равен 3, “многопользовательский с
сетью” или 5, “многопользовательский с сетью и
графической средой”). Всё это сводится к выполнению в
лексикографическом (грубо говоря,
алфавитном) порядке всех сценариев из
каталога
/etc/rc.d/rc
,
начинающихся на букву номер
.d/K
(Kill) с параметром
stop
и всех
сценариев, начинающихся на S
(Start) с
параметром start
. Принято после буквы
K
или S
вставлять двузначное
число, а затем — имя службы, а сами файлы в
rc
делать
символьными ссылками на сценарии в
номер
.d//etc/rc.d/init.d/
(точнее, на файлы в
../init.d/
, так достигается совместимость с
системами, в которых init.d
и
rc*.d
лежат не в
/etc/rc.d
, а в /etc
или
вообще где угодно). Останов системы рассматривается как переход на
уровень выполнения 0
, а перезагрузка — на
уровень выполнения 6
, так что имена файлов в
каталогах rc0.d
и rc6.d
начинаются сплошь на K
, кроме
S00killall
, S01reboot
или S01halt
. Таким образом достигается
строгий порядок выполнения действий без создания единого
стартового сценария (как это делалось, например, в ранних версиях BSD).
В ALT Linux эти рекомендации носят
обязательный характер, потому что размещение
сценариев в каталогах rc*.d
происходит не
вручную, а автоматически. Для этого в начало каждого сценария
вносятся комментарии особого вида: #
description:
, после которого следует краткое описание,
и chkconfig:
, после которого следует три числа.
Первое — набор цифр (без пробелов), соответствующих уровням
выполнения, на которых сценарий будет
использоваться (т. е. создаваться ссылка, начинающаяся на
S
). Второе — двузначное число, которое
будет добавляться в имя ссылки после S
, а
третье — двузначное число, которое будет добавляться в имя
ссылки после K
.
#! /bin/sh # # crond Start/Stop the cron clock daemon. # # chkconfig: 2345 40 60 # description: cron is a standard UNIX program that runs user-specified \ # programs at periodic scheduled times. vixie cron adds a \ # number of features to the basic UNIX cron, including better \ # security and more powerful configuration options. # processname: crond # config: /etc/crontab # pidfile: /var/run/crond.pid
Команда chkconfig
имя_службы
on автоматически
создаёт ссылки типа S
для всех уровней
выполнения, указанных в первом числе поля
chkconfig:
, а для остальных уровней выполнения
— ссылки типа K
. Команда
chkconfig имя_службы
off заводит во всех каталогах
rc*.d
ссылки типа K
. Стоит
заметить, что другие поля похожего формата остались в стартовых
сценариях от других, более сложных систем автоматической загрузки
и в ALT Linux не используются. В приведённом
примере сценарий netfs
(монтирование сетевых
файловых систем) запускается на уровнях 3, 4, и 5, причём при
запуске служба имеет номер 25, а при останове — 75.
$ grep chkconfig: /etc/rc.d/init.d/netfs # chkconfig: 345 25 75 $ chkconfig —list netfs netfs 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выкл $ ls -l /etc/rc.d/rc*.d/*netfs* lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc0.d/K75netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc1.d/K75netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc2.d/K75netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc3.d/S25netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc4.d/S25netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc5.d/S25netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc6.d/K75netfs -> ../init.d/netfs
Кроме того, правила оформления стартовых сценариев ALT Linux
рекомендуют, чтобы они распознавали ещё один параметр —
status
, позволяющий определить состояние
службы (по крайней мере, узнать, запущена ли она или нет). Корректный
стартовый сценарий всё равно должен уметь это определять, иначе
попытка запуска K
-сценария при
остановленной службе будет выдавать сообщение
об ошибке, даже если спецификой службы это предусмотрено.
Например, супердемон xinetd при запуске
проверяет, зарегистрирована ли в нём хотя бы одна сетевая служба,
а не найдя таковых, завершает работу. Для отражения того, что
запуск службы прошёл успешно, в ALT Linux заведён специальный
каталог, /var/lock/subsys
, в котором
стартовые сценарии создают т. н. lock-файлы. Если lock-файл
службы есть в этом каталоге, значит, она запущена, и
K
-сценарий действительно должен её
останавливать. Поэтому рекомендуется запускать и останавливать
системные службы не напрямую, запуском демонов, и даже не путём
запуска сценария из init.d
, а с помощью
утилиты service. Впрочем, вызов
service имя_службы
команда
эквивалентен
/etc/rc.d/init.d/
имя_службы
команда
, просто командная
строка выходит короче.
При написании стартового сценария рекомендуется пользоваться
файлом /etc/init.d/functions
, в котором
определены основные функции для работы с
/var/lock/subsys
и унифицированным выводом
сообщений на экран. Обратите внимание, что по соображениям
совместимости обычно используется имя каталога
/etc/init.d
, а не
/etc/rc.d/init.d
, при этом первое имя —
всего лишь символьная ссылка на второе.