Как уже упоминалось ранее, rc.subr(8) может предоставить некоторые методы по-умолчанию. Очевидно, что такие стандартные методы не могут быть универсальными. Они предназначены в общем случае для запуска и остановки простого приложения-демона. Давайте предположим, что нам нужно написать rc.d скрипт для такого демона. Пусть демон называется mumbled. Вот этот скрипт:
#!/bin/sh
. /etc/rc.subr
name="mumbled"
rcvar=`set_rcvar`
command="/usr/sbin/${name}"
load_rc_config $name
run_rc_command "$1"
Необычайно просто, не так ли? Давайте посмотрим на него немного внимательнее. Отметить нужно следующее:

start, stop, restart, poll и status.Демон будет запущен командой $command с ключами определенными в
переменной $mumbled_flags. Таким образом, все данные, необходимые
для стандартного метода start определены в переменных на
момент запуска скрипта. В отличие от метода start, другим
методам может потребоваться дополнительная информация о запущенном процессе. Например,
stop должен знать об идентификаторе запущенного процесса
(PID) чтобы завершить его. В нашем случае, rc.subr(8) найдет
среди запущенных процессов процесс с именем $procname. Эта
переменная выставляется rc.subr(8)
автоматически и по-умолчанию ее значение соответствует переменной command. Другими словами, когда мы указываем значение command, мы тем самым указываем и procname. Это
позволяет нашему скрипту проверить, запущен ли демон или завершить его работу.
Note: Некоторые программы на самом деле - запускаемые скрипты. Система запускает такие скрипты в командном интерпретаторе, передавая ему имя скрипта в качестве аргумента. Это отражается и на списке процессов, в том числе сбивает с толку rc.subr(8). Если вы запускаете такой скрипт, то вы должны указать интерпретатор как значение переменной command_interpreter, чтобы rc.subr(8) мог правильно найти его в списке процессов.
Для каждого rc.d скрипта есть необязательная переменная rc.conf(5), имеющая приоритет над переменной command. Она называется ${name}_program, где name - обязательная переменная, которая обсуждалась ранее. Другими словами, в нашем случае переменная будет выглядеть как mumbled_program. Эта переменная фактически переопределяет переменную rc.subr(8) command.
Особенности языка sh(1) позволяют указать значение переменной ${name}_program в файле rc.conf(5) или даже в самом скрипте и даже в том случае, если переменная command не установлена. В этом случае специальные свойства переменной ${name}_program теряются и она становится обыкновенной переменной внутри скрипта и вы можете использовать ее в своих целях. При таком использовании теряется смысл переменной ${name}_program, так как в rc.d скрипте переменные ${name}_program и command при фактическом выполнении будут иметь одно значение.
Для более подробной информации смотрите страницу справочника rc.subr(8).
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.