Сценарии rc.d используются для запуска служб при запуске системы и дают администратору стандартный способ остановки, запуска и перезапуска службы. Порты интегрируются в системную инфраструктуру rc.d. Подробности по её использованию можно найти в главе rc.d Руководства. Подробное объяснение доступных команд находится в rc(8) и rc.subr(8). Наконец, есть статьяо практических аспектах написания сценариев rc.d.
Установить можно один или более сценариев rc.d:
USE_RC_SUBR= doormand
Сценарии обязаны размещаться в подкаталоге files с обязательным добавлением суффикса .in к имени файла. Для этого файла будут использоваться стандартные расширения SUB_LIST. Также особенно приветствуется использование расширений %%PREFIX%% и %%LOCALBASE%%. Подробнее о SUB_LIST в соответствующей главе.
До FreeBSD 6.1-RELEASE интеграция с rcorder(8) доступна через использование USE_RCORDER вместо USE_RC_SUBR. Однако, использовать этот метод не нужно, если ваш порт не включает опцию по своей установке в основную систему или службе не нужно запускаться до выполнения сценария FILESYSTEMS из rc.d основной системы.
Начиная с FreeBSD 6.1-RELEASE локальные сценарии rc.d (включая установленные из портов) включены в общий rcorder(8) основной системы.
Пример простого сценария rc.d:
#!/bin/sh # $FreeBSD$ # # PROVIDE: doormand # REQUIRE: LOGIN # KEYWORD: shutdown # # # Add the following lines to /etc/rc.conf.local or /etc/rc.conf to enable doorman: # doorman_enable (bool): Set to "NO" by default. # Set it to "YES" to enable doorman # doorman_config (path): Set to "%%PREFIX%%/etc/doormand/doormand.cf" by default. # Add the following lines to /etc/rc.conf.local or /etc/rc.conf # to enable this service: # # doormand_enable (bool): Set to NO by default. # Set it to YES to enable doormand. # doormand_config (path): Set to %%PREFIX%%/etc/doormand/doormand.cf # by default. # . /etc/rc.subr name="doormand" rcvar=${name}_enable command=%%PREFIX%%/sbin/${name} pidfile=/var/run/${name}.pid load_rc_config $name : ${doormand_enable="NO"} : ${doormand_config="%%PREFIX%%/etc/doormand/doormand.cf"} command_args="-p $pidfile -f $doormand_config" run_rc_command "$1"
Если нет стоящей причины запускать службы раньше всех портов, сценарии должны использовать
REQUIRE: LOGIN. Если служба работает под определенным пользователем (отличным от root), то это делается принудительно. В сценарий выше включена конструкция
KEYWORD: shutdown, потому что вымышленный порт, который мы используем в качестве примера, запускает службу, и она должна корректно завершиться при выключении системы. Если сценарий не запускает постоянную службу, то это не является необходимым.
Присвоение переменной по умолчанию в стиле "=" является более предпочтительным по сравнению со стилем ":=", используемым здесь, поскольку первый устанавливает значение по умолчанию только если переменная не установлена, а последний устанавливает её, если переменная не установлена или обнулена. Пользователь вполне может написать в своем файле rc.conf.local что-нибудь типа
doormand_flags=""и тогда произойдет неуместная подстановка переменной с использованием ":=", что переопределит намерения пользователя.
Замечание: Новые сценарии не следует добавлять с суффиксом .sh. В определенный момент будет произведено массовое репозиторное копирование всех сценариев, все еще имеющих этот суффикс.
Существует возможность сделать автоматическую остановку службы частью процедуры удаления. Мы советуем использовать эту функцию только при абсолютной необходимости остановки службы перед тем как файлы будут удалены. Как правило, решение об остановке службы при удалении остается за администратором. Также учитывайте, что это в том числе касается обновлений.
В pkg-plist добавляются примерно такие строки:
@stopdaemon doormand
Параметр обязательно должен совпадать с содержимым переменной USE_RC_SUBR.
Пред. | Начало | След. |
Использование баз данных | Уровень выше | Добавление пользователей и групп |