added man-patch.xml file
[linux_from_scratch.git] / bootscripts / rc.d / init.d / functions
blob98997d8fb6f5335814faa0b26f7849ba2bacf116
1 #!/bin/bash
2 # Begin $rc_base/init.d/functions - Run Level Control Functions
4 # Based on functions script from LFS-3.1 and earlier.
5 # Rewritten by Gerard Beekmans - gerard@linuxfromscratch.org
7 # With code based on Matthias Benkmann's simpleinit-msb @
8 # http://winterdrache.de/linux/newboot/index.html
10 umask 022
12 export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
14 KILLDELAY=3
16 COLUMNS=$(stty size)
17 COLUMNS=${COLUMNS##* }
18 COL=$[ $COLUMNS - 10 ]
19 WCOL=$[ $COLUMNS - 30 ]
20 SET_COL="echo -en \\033[${COL}G"
21 SET_WCOL="echo -en \\033[${WCOL}G"
22 CURS_UP="echo -en \\033[A"
24 NORMAL="echo -en \\033[0;39m"
25 SUCCESS="echo -en \\033[1;32m"
26 WARNING="echo -en \\033[1;33m"
27 FAILURE="echo -en \\033[1;31m"
29 print_error_msg()
31 echo
32 $FAILURE
33 echo "You should not be reading this error message. It means"
34 echo "that an unforseen error took place in $i,"
35 echo "which exited with a return value of $error_value"
36 echo
37 echo "If you're able to track this error down to a bug in one"
38 echo "of the files provided by the LFS book, please be so kind"
39 echo "to inform us at lfs-dev@linuxfromscratch.org"
40 $NORMAL
41 echo
42 echo
43 echo "Press Enter to continue..."
44 read
47 check_script_status()
49 if [ ! -f $i ]
50 then
51 echo "$i is not a valid symlink"
52 continue
55 if [ ! -x $i ]
56 then
57 echo "$i is not executable, skipping"
58 continue
62 evaluate_retval()
64 error_value=$?
66 if [ $error_value = 0 ]
67 then
68 print_status success
69 else
70 print_status failure
73 return $error_value
76 print_status()
78 if [ $# = 0 ]
79 then
80 echo "Usage: $0 {success|warning|failure}"
81 return 1
84 $CURS_UP
86 case "$1" in
87 success)
88 $SET_COL
89 echo -n "[ "
90 $SUCCESS
91 echo -n "OK"
92 $NORMAL
93 echo " ]"
95 warning)
96 case "$2" in
97 running)
98 $SET_WCOL
99 echo "Already running"
100 $CURS_UP
102 not_running)
103 $SET_WCOL
104 echo "Not running"
105 $CURS_UP
107 esac
108 $SET_COL
109 echo -n "[ "
110 $WARNING
111 echo -n "ATTN"
112 $NORMAL
113 echo " ]"
115 failure)
116 $SET_COL
117 echo -n "["
118 $FAILURE
119 echo -n "FAILED"
120 $NORMAL
121 echo "]"
123 esac
126 getpids()
128 base=${1##*/}
129 pidlist=$(pidof -o $$ -o $PPID -x $base)
132 loadproc()
134 if [ $# = 0 ]
135 then
136 echo "Usage: loadproc {program}"
137 exit 1
140 getpids $1
142 if [ -z "$pidlist" ]
143 then
144 "$@"
145 evaluate_retval
146 else
147 $SET_WCOL
148 print_status warning running
152 killproc()
154 if [ $# = 0 ]
155 then
156 echo "Usage: killproc {program} [signal]"
157 exit 1
160 if [ -z "$2" ]; then
161 signal=TERM
162 fallback=KILL
163 else
164 signal=${2##-}
165 signal=${signal##SIG}
166 fallback=""
169 getpids $1
171 if [ -n "$pidlist" ]; then
172 failure=0
174 for pid in $pidlist
176 kill -$signal $pid 2>/dev/null
178 for ((i=0; $i<5000; i=$i+1)); do :; done
180 for ((i=0; $i<$KILLDELAY; i=$i+1)); do
181 kill -0 $pid 2>/dev/null || break
182 sleep 1
183 done
185 if [ -n "$fallback" ]; then kill -$fallback $pid 2>/dev/null; fi
187 kill -0 $pid 2>/dev/null && failure=1
188 done
190 base=${1##*/}
191 if [ $failure = 0 ]; then rm -f /var/run/$base.pid; fi
193 (exit $failure)
194 evaluate_retval
195 else
196 $SET_WCOL
197 print_status warning not_running
201 reloadproc()
203 if [ $# = 0 ]
204 then
205 echo "Usage: reloadproc {program} [signal]"
206 exit 1
209 if [ -z "$2" ]; then
210 signal=HUP
211 else
212 signal=${2##-}
213 signal=${signal##SIG}
217 getpids $1
219 if [ -n "$pidlist" ]
220 then
221 failure=0
223 for pid in $pidlist
225 kill -$signal $pid || failure=1
226 done
228 (exit $failure)
229 evaluate_retval
230 else
231 $SET_WCOL
232 print_status warning not_running
236 statusproc()
238 if [ $# = 0 ]
239 then
240 echo "Usage: statusproc {program}"
241 exit 1
244 base=${1##*/}
245 getpids $base
247 if [ -n "$pidlist" ]
248 then
249 echo "$base is running with Process ID(s) $pidlist"
250 else
251 if [ -s /var/run/$base.pid ]
252 then
253 echo "$1 is not running but /var/run/$base.pid exists"
254 return 1
255 else
256 echo "$1 is not running"
261 # End $rc_base/init.d/functions