]> git.pld-linux.org Git - projects/rc-scripts.git/blob - rc.d/init.d/functions
- added template .cvsignore.
[projects/rc-scripts.git] / rc.d / init.d / functions
1 #!/bin/bash
2 #
3 # functions     This file contains functions to be used by most or all
4 #               shell scripts in the /etc/init.d directory.
5 #
6 # Version:      @(#) /etc/init.d/functions 1.01 26-Oct-1993
7 #
8 # Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
9 # Hacked by:    Greg Galloway and Marc Ewing
10 # Modified for PLD by Marek Obuchowicz <elephant@shadow.eu.org>
11 #
12
13 # First set up a default search path.
14 export PATH="/sbin:/usr/sbin:/bin:/usr/bin"
15
16 # Some functions to handle PLD-style messages
17 function show() {
18   text="$*".............................................
19   echo -ne `echo $text | cut -c1-45`
20 }
21
22 function busy() {
23   echo -ne '\e[0;36m[\e[0;35m BUSY \e[0;36m]\e[0;37m'
24 }
25
26 function ok() {
27   echo -e '\e[0;36m[\e[0;32m DONE \e[0;36m]\e[0;37m'
28 }
29
30 function fail() {
31   echo -e '\e[0;36m[\e[0;31m FAIL \e[0;36m]\e[0;37m'
32 }
33
34 function died() {
35   echo -e '\e[0;36m[\e[0;31m DIED \e[0;36m]\e[0;37m'
36 }
37
38 function deltext() {
39   echo -ne '\b\b\b\b\b\b\b\b'
40 }
41
42 # A function to start a program.
43 daemon() {
44         TMPFILE=`mktemp /tmp/init-XXXXXX`
45         
46         nicelevel=0
47         # Test syntax.
48         case $1 in
49             '')    echo '$0: Usage: daemon [+/-nicelevel] {program}'
50                    return 1;;
51             -*|+*) nicelevel=$1
52                    shift;;
53         esac
54
55         # make sure it doesn't core dump anywhere; while this could mask
56         # problems with the daemon, it also closes some security problems
57         ulimit -c 0
58
59         # And start it up.
60         busy
61         if nice -n $nicelevel "$@" &> $TMPFILE; then
62           deltext
63           ok
64         else
65           deltext
66           fail
67           cat $TMPFILE
68         fi
69         rm -f $TMPFILE
70 }
71
72 # A function to stop a program.
73 killproc() {
74         # Test syntax.
75         if [ $# = 0 ]; then
76                 echo "Usage: killproc {program} [signal]"
77                 return 1
78         fi
79
80         busy
81         
82         TMPFILE=`mktemp /tmp/init-XXXXXX`
83         
84         notset=0
85         # check for second arg to be kill level
86         if [ "$2" != "" ] ; then
87                 killlevel=$2
88         else
89                 notset=1
90                 killlevel="-9"
91         fi
92
93         # Save basename.
94         base=`basename $1`
95
96         # Find pid.
97         pid=`pidofproc $base`
98
99         # Kill it.
100         if [ "$pid" != "" ] ; then
101                 if [ "$notset" = 1 ] ; then
102                         # TERM first, then KILL if not dead
103                         kill -TERM $pid &> $TMPFILE
104                         usleep 100000
105                         dead=`ps aux | awk '{print $2}' | grep $pid`
106                         if [ "$dead" != "" ]; then
107                                 sleep 3
108                                 kill -KILL $pid &> $TMPFILE
109                         fi
110                 # use specified level only
111                 else
112                         kill $killlevel $pid &> $TMPFILE
113                 fi
114         else
115           rm -f /var/run/$base.pid
116           deltext
117           fail
118           return
119         fi
120
121         # Remove pid file if any.
122         rm -f /var/run/$base.pid
123         
124         if [ -z "`cat $TMPFILE`" ]; then
125                 deltext
126                 ok
127         else
128                 deltext
129                 died    
130         fi
131         rm -f $TMPFILE
132 }
133
134 # A function to find the pid of a program.
135 pidofproc() {
136         # Test syntax.
137         if [ $# = 0 ] ; then
138                 echo "Usage: pidofproc {program}"
139                 return 1
140         fi
141
142         # First try "/var/run/*.pid" files
143         if [ -f /var/run/$1.pid ] ; then
144                 pid=`head -1 /var/run/$1.pid`
145                 if [ "$pid" != "" ] ; then
146                         echo $pid
147                         return 0
148                 fi
149         fi
150
151         # Next try "pidof"
152         pid=`pidof $1`
153         if [ "$pid" != "" ] ; then
154                 echo $pid
155                 return 0
156         fi
157
158         # Finally try to extract it from ps
159         ps auxw | awk 'BEGIN { prog=ARGV[1]; ARGC=1 } 
160                            { if ((prog == $11) || (("(" prog ")") == $11) ||
161                            ((prog ":") == $11)) { print $2 } }' $1
162 }
163 status() {
164         # Test syntax.
165         if [ $# = 0 ] ; then
166                 echo "Usage: status {program}"
167                 return 1
168         fi
169
170         # First try "pidof"
171         pid=`pidof $1`
172         if [ "$pid" != "" ] ; then
173                 echo "$1 (pid $pid) is running..."
174                 return 0
175         else
176                 pid=`ps auxww | grep $1 | egrep -v grep\|$0 | awk '{print $2}'`
177                 if [ "$pid" != "" ] ; then
178                         echo "$1 (pid $pid) is running..."
179                         return 0
180                 fi
181         fi
182
183         # Next try "/var/run/*.pid" files
184         if [ -f /var/run/$1.pid ] ; then
185                 pid=`head -1 /var/run/$1.pid`
186                 if [ "$pid" != "" ] ; then
187                         echo "$1 dead but pid file exists"
188                         return 1
189                 fi
190         fi
191         # See if /var/lock/subsys/$1 exists
192         if [ -f /var/lock/subsys/$1 ]; then
193                 echo "$1 dead but subsys locked"
194                 return 2
195         fi
196         echo "$1 is stopped"
197         return 3
198 }
This page took 0.054822 seconds and 4 git commands to generate.