xref: /dragonfly/sbin/rcrun/rcrun.sh (revision 409b4c59)
1#!/bin/sh
2#
3# rcng command
4#
5# $DragonFly: src/sbin/rcrun/rcrun.sh,v 1.9 2008/07/21 23:42:02 swildner Exp $
6
7dostart()
8{
9    arg=$1
10    shift
11
12    for i in $@; do
13	case X`varsym -s -q rcng_$i` in
14	Xrunning*)
15	    echo "$i has already been started"
16	    ;;
17	Xconfigured*)
18	    echo "$i has already been configured"
19	    ;;
20	*)
21	    _return=0
22	    for j in `rcorder -o $i /etc/rc.d/*`; do
23		need=1
24		for k in `rcorder -p $j`; do
25		    if [ $k = $i ]; then
26			need=0
27		    else
28			state=`varsym -s -q rcng_$k`
29			case X$state in
30			Xrunning*|Xconfigured*|Xirrelevant*|Xdisabled*)
31			    ;;
32			*)
33			    echo "$i depends on $k, current state: $state"
34			    _return=1
35			    ;;
36			esac
37		    fi
38		done
39	    done
40	    # $j contains the last dependency, which we run
41	    #
42	    if [ X$j = X ]; then
43		echo "Unable to find keyword $i"
44	    elif [ $_return = 0 ]; then
45		echo "Running $j $arg"
46		(cd /etc/rc.d; sh $j $arg)
47		case X`varsym -s -q rcng_$i` in
48		Xdisabled*)
49		    echo "$i is disabled, enable in rc.conf first or use rcforce"
50		    ;;
51		Xfailed*)
52		    echo "$i has failed to start"
53		    ;;
54
55		esac
56	    fi
57	    ;;
58	esac
59    done
60}
61
62arg=$0
63case ${0##*/} in
64rcstart)
65    arg=start
66    ;;
67rcstop)
68    arg=stop
69    ;;
70rcrestart)
71    arg=restart
72    ;;
73rcvar)
74    arg=rcvar
75    ;;
76rcvars)
77    arg=rcvar
78    ;;
79rclist)
80    arg=list
81    ;;
82rcforce)
83    arg=forcestart
84    ;;
85rcfast)
86    arg=faststart
87    ;;
88rcenable)
89    arg=enable
90    ;;
91rcdisable)
92    arg=disable
93    ;;
94*)
95    arg=$1
96    shift
97    ;;
98esac
99
100case $arg in
101start)
102	dostart start $@
103	;;
104forcestart)
105	dostart forcestart $@
106	;;
107faststart)
108	dostart faststart $@
109	;;
110stop)
111	for i in $@; do
112	    j=`rcorder -o $i /etc/rc.d/* | tail -1`
113	    if [ X$j = X ]; then
114		echo "Unable to find keyword $i"
115	    else
116		(cd /etc/rc.d; sh $j stop)
117	    fi
118	done
119	;;
120restart)
121	for i in $@; do
122	    j=`rcorder -o $i /etc/rc.d/* | tail -1`
123	    if [ X$j = X ]; then
124		echo "Unable to find keyword $i"
125	    else
126		(cd /etc/rc.d; sh $j restart)
127	    fi
128	done
129	;;
130disable|enable)
131	if [ "$arg" = "enable" ]; then
132	    mode=YES
133	else
134	    mode=NO
135	fi
136	for i in $@; do
137	    j=`rcorder -o $i /etc/rc.d/* | tail -1`
138	    if [ X$j = X ]; then
139		echo "Unable to find provider id $i"
140	    elif [ `varsym -s -q rcng_$i` = "$mode" ]; then
141		echo "$i is already $mode"
142	    else
143		vars=`(cd /etc/rc.d; sh $j rcvar) 2>/dev/null | egrep '_enable' | sed -e 's/\\$//g' | sed -e 's/=.*//g'`
144		cp /etc/rc.conf /etc/rc.conf.bak
145		for k in $vars; do
146		    rm -f /etc/rc.conf.$$
147		    ( egrep -v "#rcrun ${k}" /etc/rc.conf; printf "${k}=${mode}\t#rcrun ${k}_enable\n" ) > /etc/rc.conf.$$
148		    mv -f /etc/rc.conf.$$ /etc/rc.conf
149		    echo "added/modified: ${k}=${mode}"
150		done
151		if [ $arg = enable ]; then
152		    rcstart $i
153		else
154		    rcstop $i
155		fi
156	    fi
157	done
158	;;
159rcvar)
160	for i in $@; do
161	    j=`rcorder -o $i /etc/rc.d/* | tail -1`
162	    if [ X$j = X ]; then
163		echo "Unable to find provider id $i"
164	    else
165		(cd /etc/rc.d; sh $j rcvar)
166	    fi
167	done
168	;;
169list)
170	if [ "X$*" = X ]; then
171	    for i in `varsym -a -s | egrep '^rcng_'`; do
172		echo $i
173	    done
174	else
175	    for i in $@; do
176		varsym -s rcng_$i 2>/dev/null || varsym -s rcng_$i
177	    done
178	fi
179	;;
180*)
181	echo "usage: rcrun start|stop|restart|rcvar|list|forcestart|faststart|disable|enable"
182	echo "             script ..."
183	;;
184esac
185
186