Статья обновлена 26.11.2009
Порядок загрузки.
Узнать порядок, в котором стартуют демоны из директорий /etc/rc.d и /usr/loca/etc/rc.d можно с помощью команды rcorder:
$rcorder /etc/rc.d/* /usr/local/etc/rc.d/*
За порядок загрузки отвечают слудующие директивы в стартовых скриптах демонов:
# REQUIRE:
# BEFORE:
где первая отвечает за то, после какой службы стартовать, а вторая перед какой. Эти директивы могут как присутствовать так и отсутствовать. Пример:
# PROVIDE: pdns_server
# REQUIRE: apache2
Опции скриптов
restart – последовательно stop и start.
reload – перегружает процесс, посылая ему сигнал.
status – показывает статус процесса.
poll – ждет завершения процесса.
rcvar – показывает соответствующие переменные rc.conf.
Параметры status, reload и poll реализуются только в том случае, если скрипт запускает какой-либо процесс.
Принудительные действия
Есть интересная опция, force (правда не всегда) которая позволяет принудительно сделать что-то. Очень полезна, например, при запуске демона, не прописывая его в /etc/rc.conf (она пишется в сочетании с опциями start\restart\stop):
#/etc/rc.d/named forcestart
Включаем debug режим
Если у вас не запускается rc-скрипт или вам нужна повышенная информативность, то в /etc/rc.confможно вписать такие переменные:
rc_debug=”YES” # Set to YES to enable debugging output from rc.d
rc_info=”YES” # Enables display of informational messages at boot.
Это включает подробные вывод о том, какие переменные из rc и sysctl и во что установлены при загрузке или при старте\рестарте rc-скриптов. Вот часть из того, что он пишет:
Nov 26 15:33:42 srv-test kernel: /etc/rc: DEBUG: run_rc_command: doit: mountlate_start
Nov 26 15:33:42 srv-test kernel: Mounting late file systems:
Nov 26 15:33:42 srv-test kernel: .
Nov 26 15:33:42 srv-test kernel: /etc/rc: DEBUG: checkyesno: nscd_enable is set to NO.
Nov 26 15:33:42 srv-test kernel: /etc/rc: DEBUG: checkyesno: ntpd_enable is set to NO.
Nov 26 15:33:42 srv-test kernel: /etc/rc: DEBUG: checkyesno: powerd_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: rarpd_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: sdpd_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: rfcomm_pppd_server_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: rtadvd_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: rwhod_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: timed_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: ugidfw_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: nis_yppasswdd_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: nut_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: nut_upslog_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: nut_upsmon_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: mysql_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: radiusd_enable is set to YES.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: pid file (/var/run/radiusd/radiusd.pid): not readable.
Nov 26 15:33:43 srv-test kernel: Starting radiusd.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: run_rc_command: doit: /usr/local/sbin/radiusd
Nov 26 15:33:43 srv-test kernel: Thu Nov 26 15:33:43 2009 : Info: Starting – reading configuration files …
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: postgresql_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: openvpn_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: htcacheclean_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: healthd_enable is set to NO.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: checkyesno: sshd_enable is set to YES.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: pid file (/var/run/sshd.pid): not readable.
Nov 26 15:33:43 srv-test kernel: /etc/rc: DEBUG: run_rc_command: start_precmd: sshd_precmd
Пример простейшего стартового скрипта.
Данный скрипт не требует прописывания в /etc/rc.conf никаких строчек, просто помещаете его в директорию /usr/local/etc/rc.d и делаете исполняемым. Если постребуется, что бы скрипт запускался, если есть соответствующая строка в rc.conf, то измените YES на NO в строкеvpn_enable=”YES”
#!/bin/sh
# PROVIDE: vpn
# REQUIRE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr
: ${vpn_enable=”YES”}
name=”vpn”
rcvar=`set_rcvar`
load_rc_config $name
command_args=”&”
command=”/scripts/${name}”
run_rc_command “$1”