Magellan Linux

Contents of /branches/unlabeled-1.1.1/magellan-initscripts/etc/rc.d/init.d/functions

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (show annotations) (download)
Mon Dec 13 22:52:07 2004 UTC (19 years, 3 months ago) by niro
File size: 6078 byte(s)
imported.

1 #!/bin/bash
2 # Begin $rc_base/init.d/functions - Run Level Control Functions
3
4 # Based on functions script from LFS-3.1 and earlier.
5 # Rewritten by Gerard Beekmans - gerard@linuxfromscratch.org
6
7 # With code based on Matthias Benkmann's simpleinit-msb @
8 # http://winterdrache.de/linux/newboot/index.html
9
10 umask 022
11
12 export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
13
14 KILLDELAY=3
15
16 COLUMNS=$(stty size)
17 COLUMNS=${COLUMNS##* }
18 COL=$[ $COLUMNS - 10 ]
19 WCOL=$[ $COLUMNS - 30 ]
20 WWCOL=$[ $COLUMNS - 40 ]
21 SET_COL="echo -en \\033[${COL}G"
22 SET_WCOL="echo -en \\033[${WCOL}G"
23 SET_WWCOL="echo -en \\033[${WWCOL}G"
24 CURS_UP="echo -en \\033[A"
25
26 NORMAL="echo -en \\033[0;39m"
27 SUCCESS="echo -en \\033[1;32m"
28 WARNING="echo -en \\033[1;33m"
29 FAILURE="echo -en \\033[1;31m"
30
31 COLRED="\033[1;6m\033[31m"
32 COLGREEN="\033[1;6m\033[32m"
33 COLYELLOW="\033[1;6m\033[33m"
34 COLBLUE="\033[1;6m\033[34m"
35 COLMAGENTA="\033[1;6m\033[35m"
36 COLWHITE="\033[1;6m\033[37m"
37 COLDEFAULT="\033[0m"
38
39 COLOREDSTAR="${COLBLUE}(${COLGREEN}*${COLBLUE})${COLDEFAULT} "
40
41 #location to save the started services
42 svcdir="/var/lib/init.d"
43 svclib="/lib/rcscripts"
44 svcmount="no"
45 svcfstype="tmpfs"
46 svcsize=1024
47
48
49 # dummy function; needed if splashutils are not installed
50 splash() {
51 return 0
52 }
53
54
55 #source splash functions if exists
56 [ -f /etc/init.d/splash-functions ] && source /etc/init.d/splash-functions
57
58
59
60 print_error_msg()
61 {
62 return 0
63 echo
64 $FAILURE
65 echo -e " An Error occurred."
66 echo -e " Script: ${COLWHITE}$i${COLRED}"
67 echo -e " Exitcode: ${COLWHITE}$error_value${COLRED}"
68 echo
69 $NORMAL
70 echo
71 echo "Press Enter to continue..."
72 read
73 }
74
75 check_script_status()
76 {
77 if [ ! -f $i ]
78 then
79 echo "$i is not a valid symlink"
80 continue
81 fi
82
83 if [ ! -x $i ]
84 then
85 echo "$i is not executable, skipping"
86 continue
87 fi
88 }
89
90 update_svcstatus()
91 {
92 #$1 script
93 #$2 start/stop
94
95 local SVCDIR_MOUNTED
96 local SVCD_INITSCRIPT
97 local x
98
99
100 #do this only if proc is mounted
101 [ ! -f /proc/mounts ] && return 0
102
103 #check if svcdir is mounted
104 SVCDIR_MOUNTED="$(cat /proc/mounts | grep ${svcdir} | cut -d ' ' -f2)"
105 if [ "${SVCDIR_MOUNTED}" == "${svcdir}" ]
106 then
107 #check if statedir exists
108 [ ! -d ${svcdir}/started ] && mkdir ${svcdir}/started
109
110 #get real name of the initscript, not from the symlink
111 if [ -L "$0" ]
112 then
113 x="$(readlink $0)"
114 SVCD_INITSCRIPT="$(basename ${x})"
115 else
116 SVCD_INITSCRIPT="$(basename $0)"
117 fi
118
119 case $1 in
120 start)
121 #write to svcddir
122 #write state
123 echo ok > ${svcdir}/started/"${SVCD_INITSCRIPT}"
124 ;;
125 stop)
126 #echo "$(ls ${svcdir}/started)"
127 if [ -f ${svcdir}/started/${SVCD_INITSCRIPT} ]
128 then
129 rm ${svcdir}/started/${SVCD_INITSCRIPT}
130 fi
131 ;;
132 esac
133 fi
134 }
135
136 evaluate_retval()
137 {
138 error_value=$?
139
140 if [ $error_value = 0 ]
141 then
142 print_status success
143 else
144 print_status failure
145 fi
146
147 return $error_value
148 }
149
150 print_status()
151 {
152 if [ $# = 0 ]
153 then
154 echo "Usage: $0 {success|warning|failure}"
155 return 1
156 fi
157
158 $CURS_UP
159
160 case "$1" in
161 success)
162 $SET_COL
163 echo -e -n $COLBLUE"[ "
164 $SUCCESS
165 echo -e -n "OK"
166 echo -e $COLBLUE" ]"
167 $NORMAL
168 ;;
169 warning)
170 case "$2" in
171 running)
172 $SET_WCOL
173 echo "Already running"
174 $CURS_UP
175 ;;
176 not_running)
177 $SET_WCOL
178 echo "Not running"
179 $CURS_UP
180 ;;
181 esac
182 $SET_COL
183 echo -e -n $COLBLUE"[ "
184 $WARNING
185 echo -e -n "ATTN"
186 echo -e $COLBLUE" ]"
187 $NORMAL
188 ;;
189 failure)
190 $SET_COL
191 echo -e -n $COLBLUE"["
192 $FAILURE
193 echo -e -n "FAILED"
194 echo -e $COLBLUE"]"
195 $NORMAL
196 ;;
197 esac
198 }
199
200 getpids()
201 {
202 base=${1##*/}
203 pidlist=$(pidof -o $$ -o $PPID -x $base)
204 }
205
206 loadproc()
207 {
208 if [ $# = 0 ]
209 then
210 echo "Usage: loadproc {program}"
211 exit 1
212 fi
213
214 getpids $1
215
216 if [ -z "$pidlist" ]
217 then
218 "$@"
219 evaluate_retval
220 else
221 $SET_WCOL
222 print_status warning running
223 fi
224 }
225
226 killproc()
227 {
228 if [ $# = 0 ]
229 then
230 echo "Usage: killproc {program} [signal]"
231 exit 1
232 fi
233
234 if [ -z "$2" ]; then
235 signal=TERM
236 fallback=KILL
237 else
238 signal=${2##-}
239 signal=${signal##SIG}
240 fallback=""
241 fi
242
243 getpids $1
244
245 if [ -n "$pidlist" ]; then
246 failure=0
247
248 for pid in $pidlist
249 do
250 kill -$signal $pid 2>/dev/null
251
252 for ((i=0; $i<5000; i=$i+1)); do :; done
253
254 for ((i=0; $i<$KILLDELAY; i=$i+1)); do
255 kill -0 $pid 2>/dev/null || break
256 sleep 1
257 done
258
259 if [ -n "$fallback" ]; then kill -$fallback $pid 2>/dev/null; fi
260
261 kill -0 $pid 2>/dev/null && failure=1
262 done
263
264 base=${1##*/}
265 if [ $failure = 0 ]; then rm -f /var/run/$base.pid; fi
266
267 (exit $failure)
268 evaluate_retval
269 else
270 $SET_WCOL
271 print_status warning not_running
272 fi
273 }
274
275 reloadproc()
276 {
277 if [ $# = 0 ]
278 then
279 echo "Usage: reloadproc {program} [signal]"
280 exit 1
281 fi
282
283 if [ -z "$2" ]; then
284 signal=HUP
285 else
286 signal=${2##-}
287 signal=${signal##SIG}
288
289 fi
290
291 getpids $1
292
293 if [ -n "$pidlist" ]
294 then
295 failure=0
296
297 for pid in $pidlist
298 do
299 kill -$signal $pid || failure=1
300 done
301
302 (exit $failure)
303 evaluate_retval
304 else
305 $SET_WCOL
306 print_status warning not_running
307 fi
308 }
309
310 statusproc()
311 {
312 if [ $# = 0 ]
313 then
314 echo "Usage: statusproc {program}"
315 exit 1
316 fi
317
318 base=${1##*/}
319 getpids $base
320
321 if [ -n "$pidlist" ]
322 then
323 echo "$base is running with Process ID(s) $pidlist"
324 else
325 if [ -s /var/run/$base.pid ]
326 then
327 echo "$1 is not running but /var/run/$base.pid exists"
328 return 1
329 else
330 echo "$1 is not running"
331 fi
332 fi
333 }
334
335 progressbar()
336 {
337 if [ $# != 1 ]
338 then
339 echo "Usage: progressbar {progress}"
340 exit 1
341 fi
342
343 if [ -f /proc/splash ]
344 then
345 echo "show $(( 65534 * $1 / 100 ))" > /proc/splash
346 fi
347 }
348
349 kernel_major_version()
350 {
351 local KV
352 KV="$(uname -r|cut -d. -f1-2)"
353 echo "${KV}"
354 }
355
356 dolisting()
357 {
358 local x=
359 local y=
360 local tmpstr=
361 local mylist=
362 local mypath="${*}"
363
364 if [ "${mypath%/\*}" != "${mypath}" ]
365 then
366 mypath="${mypath%/\*}"
367 fi
368
369 for x in ${mypath}
370 do
371 [ ! -e "${x}" ] && continue
372
373 if [ ! -d "${x}" ] && ( [ -L "${x}" -o -f "${x}" ] )
374 then
375 mylist="${mylist} $(ls "${x}" 2> /dev/null)"
376 else
377 [ "${x%/}" != "${x}" ] && x="${x%/}"
378
379 cd "${x}"; tmpstr="$(ls)"
380
381 for y in ${tmpstr}
382 do
383 mylist="${mylist} ${x}/${y}"
384 done
385 fi
386 done
387
388 echo "${mylist}"
389 }

Properties

Name Value
svn:executable *