rc.subr revision 1.16
1#	$OpenBSD: rc.subr,v 1.16 2010/12/27 14:49:05 ajacoutot Exp $
2
3rc_err() {
4	echo $1
5	exit 1
6}
7
8rc_start() {
9	type rc_pre >/dev/null && rc_pre
10	su -l -c ${daemon_class} -s ${daemon_shell} ${daemon_user} \
11		-c "${daemon} ${daemon_flags}" >/dev/null
12}
13
14rc_check() {
15	pgrep -f "^${pexp}" >/dev/null
16}
17
18rc_reload() {
19	pkill -HUP -f "^${pexp}"
20}
21
22rc_stop() {
23	pkill -f "^${pexp}"
24	type rc_post >/dev/null && rc_post || return 0
25}
26
27rc_conf() {
28	[ -n "${daemon}"   ] || rc_err "$0: daemon is not set"
29
30	_name=`basename $0`
31	eval _rcflags=\${${_name}_flags}
32	eval _rcuser=\${${_name}_user}
33	eval _rcclass=\${${_name}_class}
34	eval _rcshell=\${${_name}_shell}
35
36	[ -z "${daemon_class}" ] && daemon_class=daemon
37	[ -z "${daemon_shell}" ] && daemon_shell=/bin/sh
38	[ -z "${daemon_user}" ] && daemon_user=root
39
40	[ -n "${_rcflags}" ] && daemon_flags=${_rcflags}
41	[ -n "${_rcuser}"  ] && daemon_user=${_rcuser}
42	[ -n "${_rcclass}" ] && daemon_class=${_rcclass}
43	[ -n "${_rcshell}" ] && daemon_shell=${_rcshell}
44
45	daemon_flags=`echo ${daemon_flags} | tr -s "[:space:]"`
46
47	pexp="${daemon}${daemon_flags:+ ${daemon_flags}}"
48}
49
50rc_cmd() {
51	[ `id -u` -eq 0 -o X"$1" = "Xcheck" ] || \
52		rc_err "$0: need root privileges"
53
54	eval _enotsup=\${rc_${1}}
55	[ X"${_enotsup}" != X"NO" ] || rc_err "$0: $1 is not supported"
56
57	case "$1" in
58	check)
59		rc_check
60		;;
61	start)
62		rc_check || rc_start
63		;;
64	stop)
65		rc_stop
66		;;
67	reload)
68		rc_check && rc_reload
69		;;
70	restart)
71		rc_stop
72		while rc_check; do
73			sleep 1
74		done
75		rc_start
76		;;
77	*)
78		rc_err "usage: $0 {start|check|reload|restart|stop}"
79	esac
80}
81
82[ -z "${local_rcconf}" ] && . /etc/rc.conf
83rc_conf
84