rc.subr revision 1.34
1# $OpenBSD: rc.subr,v 1.34 2011/04/06 17:10:38 robert Exp $ 2 3# Default functions and variables used by rc.d(8) scripts. 4 5rc_err() { 6 echo $1 7 exit 1 8} 9 10rc_start() { 11 ${rcexec} "${daemon} ${daemon_flags} ${_bg}" 12} 13 14rc_check() { 15 pkill -0 -f "^${pexp}" 16} 17 18rc_reload() { 19 pkill -HUP -f "^${pexp}" 20} 21 22rc_stop() { 23 pkill -f "^${pexp}" 24} 25 26rc_do() { 27 if [ X"${RC_DEBUG}" = X"1" ]; then 28 echo "doing $@" && "$@" 29 else 30 "$@" >/dev/null 2>&1 31 fi 32} 33 34rc_print() { 35 _ret=$? 36 [ -z "${INRC}" -o X"$1" != X"ok" ] && _pfix="($1)" 37 echo ${INRC:+'-n'} "${INRC:+ }${_name}${_pfix}" 38 return ${_ret} 39} 40 41rc_wait() { 42 i=0 43 while [ $i -lt 30 ]; do 44 rc_do rc_check || return 0 45 sleep 1 46 i=$((i+1)) 47 done 48 return 1 49} 50 51rc_cmd() { 52 [ $(id -u) -eq 0 ] || \ 53 rc_err "$0: need root privileges" 54 55 [ X"${daemon_flags}" = X"NO" ] && exit 1 56 57 eval _enotsup=\${rc_${1}} 58 [ X"${_enotsup}" != X"NO" ] || rc_err "$0: $1 is not supported" 59 60 [ X"${rc_bg}" = X"YES" ] && local _bg="&" 61 62 case "$1" in 63 check) 64 rc_do rc_check 65 ;; 66 start) 67 rc_do rc_check || \ 68 ( 69 if type rc_pre >/dev/null; then 70 rc_do rc_pre 71 fi 72 [ $? -eq 0 ] && \ 73 rc_do rc_start && \ 74 rc_print ok || rc_print failed 75 ) 76 ;; 77 stop) 78 if rc_do rc_check; then rc_do rc_stop || \ 79 ( rc_print failed ) && \ 80 ( 81 rc_do rc_wait && 82 ( 83 if type rc_post >/dev/null; then \ 84 rc_do rc_post 85 fi 86 ) && rc_print ok || rc_print failed 87 ) 88 else 89 return 0 90 fi 91 ;; 92 reload) 93 rc_do rc_check && ( rc_do rc_reload || rc_print failed ) 94 ;; 95 restart) 96 /etc/rc.d/${_name} stop && /etc/rc.d/${_name} start 97 ;; 98 *) 99 rc_err "usage: $0 {start|check|reload|restart|stop}" 100 esac 101} 102 103[ -z "${local_rcconf}" ] && . /etc/rc.conf 104 105[ -n "${daemon}" ] || rc_err "$0: daemon is not set" 106 107_name=$(basename $0) 108eval _rcflags=\${${_name}_flags} 109eval _rcuser=\${${_name}_user} 110 111getcap -f /etc/login.conf ${_name} 1>/dev/null 2>&1 && \ 112 daemon_class=${_name} 113 114[ -z "${daemon_class}" ] && daemon_class=daemon 115[ -z "${daemon_user}" ] && daemon_user=root 116 117[ -n "${_rcflags}" ] && daemon_flags=${_rcflags} 118[ -n "${_rcuser}" ] && daemon_user=${_rcuser} 119 120daemon_flags=$(printf '%s\n' "${daemon_flags}" | tr -s "[:space:]" | sed 's/^[ \t]*//;s/[ \t]*$//') 121pexp="${daemon}${daemon_flags:+ ${daemon_flags}}" 122rcexec="su -l -c ${daemon_class} -s /bin/sh ${daemon_user} -c" 123