6.7 Использование rc в FreeBSD 5.X


Предоставил Tom Rhodes.

В FreeBSD недавно была интегрирована из NetBSD система rc.d, используемая для старта системы. Многие из файлов в каталоге /etc/rc.d предназначены для основных сервисов, они могут управляться параметрами start, stop, и restart. Например, sshd(8) может быть перезапущен следующей командой:
# /etc/rc.d/sshd restart

Эта процедура похожа для других сервисов. Конечно, сервисы обычно запускаются автоматически, как указано в rc.conf(5). Например, включение даемона Network Address Translation при запуске выполняется простым добавлением следующей строки в /etc/rc.conf:
natd_enable="YES"

Если natd_enable="NO" уже присутствует, просто измените NO на YES. Скрипты rc автоматически загрузят все другие зависимые сервисы, как описано ниже.

Поскольку система rc.d в основном предназначена для запуска/отключения сервисов во время запуска/отключения системы, стандартные параметры start, stop и restart будут работать только если установлена соответствующая переменная в /etc/rc.conf. Например, команда выше sshd restart будет работать только если переменная sshd_enable в файле /etc/rc.confустановлена в YES. Для выполнения скриптов независимо от установок в /etc/rc.conf, параметры start, stop или restart необходимо задавать с префиксом ``force''. Например, для перезапуска sshd независимо от установок в /etc/rc.conf, выполните следующую команду:
# /etc/rc.d/sshd forcerestart

Проверить состояние переменной в файле /etc/rc.conf легко: запустите соответствующий скрипт из rc.d с параметром rcvar. Проверка переменной для sshd выполняется следующей командой:
# /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YES

Note: Вторая строка (# sshd) это вывод команды команды sshd, а не консоль root.

Чтобы определить, запущен ли сервис, существует параметр status. Например для проверки того, запущен ли sshd, выполните:
# /etc/rc.d/sshd status
sshd is running as pid 433.

Возможна также перегрузка (reload) сервиса. Скрипт, запущенный с этим параметром, попытается отправить сервису сигнал, вызывающий перезагрузку файлов настройки. В большинстве случаев это означает отправку сервису сигнала SIGHUP.

Структура rcNG используется не только для сетевых серверов, она отвечает также за большую часть инициализации системы. Рассмотрим, к примеру, файл bgfsck. Во время выполнения этот скрипт выводит следующее сообщение:
Starting background file system checks in 60 seconds.

Следовательно, этот файл используется для фоновой проверки файловых систем, которая выполняется только в процессе инициализации системы.

Функционирование многих сервисов системы зависит от корректной работы других сервисов. Например, NIS и другие основанные на RPC сервисы могут не запуститься, пока не загрузится rpcbind (portmapper). Для разрешения этой проблемы, в начале каждого скрипта в комментарии включаются информация о зависимостях и другие метаданные. Программа rcorder(8) для разбора этих комментариев во время старта системы для определения порядка, в котором должны вызываться системные сервисы в соответствии с зависимостями. В начало каждого стартового файла должны быть включены следующие строки:

PROVIDE: Задает имя сервиса, предоставляемого этим файлом.

REQUIRE: Список сервисов, необходимых этому сервису. Этот файл будет запущен после указанных сервисов.

BEFORE: Список сервисов, зависящих от этого сервиса. Этот файл будет запущен до указанных сервисов.

KEYWORD: FreeBSD или NetBSD. Используется для функций, зависящих от версии *BSD.

Используя этот метод, администратор может легко контролировать системные сервисы без использования ``уровней запуска'', как в некоторых других операционных системах UNIX®.

Дополнительную информацию о системе rc.d FreeBSD 5.X можно найти на страницах справочника rc(8) и and rc.subr(8).

Обновлено: 12.03.2015