Категорії
FreeBSD

Работаем со стартовыми скриптами из rc.d

Статья обновлена 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”

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff