Во 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
Вторая строка (# sshd
) это вывод
команды sshd
, а не консоль
root
.
Чтобы определить, запущен ли сервис, существует параметр
status
. Например для проверки того, запущен ли
sshd
, выполните:
#
/etc/rc.d/sshd status
sshd is running as pid 433.
В некоторых случаях возможна также перегрузка (reload
) сервиса.
Скрипт, запущенный с этим параметром, попытается отправить сервису
сигнал, вызывающий перезагрузку файлов настройки. В большинстве
случаев это означает отправку сервису сигнала
SIGHUP
. Следует помнить, что эту функцию
поддерживают не все сервисы.
Система rc.d
используется не только для
сетевых серверов, она отвечает также за большую часть инициализации
системы.
Рассмотрим, к примеру, файл bgfsck
. Во время
выполнения этот скрипт выводит следующее сообщение:
Starting background file system checks in 60 seconds.
Следовательно, этот файл используется для фоновой проверки файловых систем, которая выполняется только в процессе инициализации системы.
Функционирование многих сервисов системы зависит от корректной
работы других сервисов. Например, NIS и другие основанные на
RPC сервисы могут не запуститься, пока не загрузится
rpcbind
(portmapper). Для разрешения этой
проблемы, в начале каждого скрипта в комментарии включаются
информация о зависимостях и другие метаданные. Программа
rcorder(8) используется для разбора этих комментариев во время старта
системы для определения порядка, в котором должны вызываться
системные сервисы в соответствии с зависимостями. В начало
каждого стартового файла должны быть включены следующие
строки:
PROVIDE
: Задает имя сервиса, предоставляемого этим файлом.
REQUIRE
: Список сервисов, необходимых этому сервису. Этот
файл будет запущен после указанных
сервисов.
BEFORE
: Список сервисов, зависящих от этого сервиса. Этот
файл будет запущен до указанных
сервисов.
Используя этот метод, администратор может легко контролировать системные сервисы без использования <<уровней запуска>>, как в некоторых других операционных системах UNIX(R).
Дополнительную информацию о системе rc.d
можно найти на страницах справочника rc(8) и
rc.subr(8).
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.