
Стартовый сценарий системной службы
Стартовый сценарий — программа (обычно написанная на shell), управляющая включением или выключением какого-нибудь свойства системы. Это может быть запуск и остановка HTTP-сервера, активизация и деактивизация сетевых настроек, загрузка модулей и настройка звуковой подсистемы и т.п. Простейший стартовый сценарий обязан принимать один параметр, значение которого может быть словом start
для запуска (включения) и stop
для остановки (выключения). Если в определенном дистрибутиве Linux принято решение, что стартовые сценарии должны понимать и другие параметры, например restart
(обычно stop
+start
, но не всегда) и status
(для опроса состояния), это требование распространяется на все стартовые сценарии. Единообразие позволяет, например, без труда запускать и останавливать демоны, не выясняя, каков PID останавливаемого процесса и какой именно сигнал ему следует послать. Достаточно запуск написать так, чтобы PID процесса откладывался в специальный файл (обычно /var/run/имя_службы
), а в остановку вписать что-то вроде kill
- правильный_сигнал cat /var/run/имя_службы
.
Все стартовые сценарии служб, которыми может воспользоваться система, принято хранить в каталоге /etc/rc.d/init.d
(в некоторых дистрибутивах, для совместимости со старыми версиями UNIX, используется /etc/init.d
, иногда это просто символьная ссылка на /etc/rc.d/init.d
). Запустить или остановить службу можно, просто вызвав соответствующий сценарий с параметром start
или stop
. Часто ту же самую задачу выполняет и специальная команда service
, которая проверяет, есть ли указанный стартовый сценарий, и запускает его:
[root@localhost root]# lsmod > old
[root@localhost root]# /etc/rc.d/init.d/sound stop
Saving OSS mixer settings: [ DONE ]
Unloading sound module (es1371): [ DONE ]
[root@localhost root]# lsmod > nosound
[root@localhost root]# service sound start
Loading sound module (es1371): [ DONE ]
Loading OSS mixer settings: [ DONE ]
[root@localhost root]# lsmod > new
[root@localhost root]# diff3 old new nosound
====3
1:2,5c
2:2,5c
es1371 25608 0
ac97_codec 11880 0 [es1371]
soundcore 3652 4 [es1371]
gameport 1628 0 [es1371]
3:1a
Пример 10.6. Перезапуск звуковой подсистемы
Здесь Иван сначала остановил, а потом снова активизировал звуковую подсистему. Остановка привела к выгрузке звуковых модулей, а повторный запуск - к загрузке, полностью аналогичной исходной. В этом Иван убедился, сравнив с помощью утилиты diff3
три списка модулей: old
(до остановки звуковой подсистемы), new
(после повторного запуска) и nosound
(между остановкой и повторным запуском). Файлы old
и new
одинаковы, а от nosound
оба отличаются тем, что со второй строки по пятую содержат названия тех самых модулей ядра (в том числе gameport
, отвечающий за джойстик).