]> git.pld-linux.org Git - packages/pound.git/blob - pound.init
- up to 2.5
[packages/pound.git] / pound.init
1 #!/bin/sh
2 #
3 # pound
4 #
5 # chkconfig:    345 85 15
6 # description:  reverse-proxy and load-balancer
7 #
8
9 # Source function library
10 . /etc/rc.d/init.d/functions
11
12 # Get network config
13 . /etc/sysconfig/network
14
15 # List of instances to start.
16 POUND_INSTANCES="pound"
17
18 # Get service config
19 [ -f /etc/sysconfig/pound ] && . /etc/sysconfig/pound
20
21 # Check that networking is up.
22 if is_yes "${NETWORKING}"; then
23         if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
24                 msg_network_down pound
25                 exit 1
26         fi
27 else
28         exit 0
29 fi
30
31 configtest() {
32         local instance="$1"
33         pound -c -f /etc/pound/$instance.cfg > /dev/null
34 }
35
36
37 # check if the $1 instance is up
38 is_up() {
39         local instance="$1"
40         local pidfile=/var/run/pound/$instance.pid
41         [ -f $pidfile ] || return 1
42         local pid=$(cat $pidfile)
43         kill -0 $pid 2>/dev/null
44         return $?
45 }
46
47 # check if any of the instances are up
48 any_up() {
49         local ret=1 instance pidfile
50
51         for pidfile in /var/run/pound/*.pid; do
52                 [ -f "$pidfile" ] || continue
53                 instance=${pidfile#/var/run/pound/}
54                 instance=${instance%.pid}
55                 is_up $instance || continue
56                 ret=0
57         done
58
59         return $ret
60 }
61
62 # check if all of the instances are up
63 all_up() {
64         local ret=1 instance pidfile
65
66         for pidfile in /var/run/pound/*.pid; do
67                 [ -f "$pidfile" ] || continue
68                 instance=${pidfile#/var/run/pound/}
69                 instance=${instance%.pid}
70                 is_up $instance && continue
71                 ret=0
72         done
73
74         return $ret
75 }
76
77 start() {
78         local ret started=0 found=0 instance
79
80         # Check if the service is already running?
81         if ! all_up; then
82                 msg_starting "Pound"; started
83                 for instance in $POUND_INSTANCES; do
84                         show "Starting Pound instance %s" "$instance"
85                         if is_up $instance; then
86                                 started
87                                 continue
88                         fi
89
90                         PIDFILE=/var/run/pound/$instance.pid
91                         start-stop-daemon --start \
92                                 --exec /usr/sbin/pound \
93                                 --pidfile $PIDFILE -- -v -f /etc/pound/$instance.cfg -p $PIDFILE
94                         ret=$?
95
96                         if [ $ret -eq 0 ]; then
97                                 ok
98                                 RETVAL=$ret
99                                 started=1
100                                 found=1
101                         else
102                                 fail
103                         fi
104                 done
105
106                 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/pound
107         else
108                 msg_already_running "Pound"
109         fi
110 }
111
112 stop() {
113         local ret instance
114         # Stop daemons.
115         if any_up; then
116                 msg_stopping "Pound"; started
117                 for instance in $POUND_INSTANCES; do
118                         is_up $instance || continue
119                         show "Stopping Pound instance %s" "$instance"; busy
120                         killproc --pidfile pound/$instance.pid pound
121                         ret=$?
122                 done
123                 rm -f /var/lock/subsys/pound > /dev/null 2>&1
124                 rm -f /var/run/pound/$instance.pid > /dev/null 2>&1
125         else
126                 msg_not_running "Pound"
127         fi
128 }
129
130 restart() {
131         local instance
132
133         if any_up; then
134                 # make up list of configured and up instances
135                 local list
136                 show "Checking configuration"; busy
137                 for instance in $POUND_INSTANCES; do
138                         # skip ones whose config fails
139                         configtest $instance || continue
140                         list="$list $instance"
141                 done
142
143                 # nothing left or never was
144                 if [ -z "$list" ]; then
145                         fail
146                         return
147                 else
148                         POUND_INSTANCES=$list
149                         ok
150                 fi
151
152         fi
153
154         stop
155         start
156 }
157
158 condrestart() {
159         if [ -f /var/lock/subsys/pound ]; then
160                 stop
161                 start
162         else
163                 msg_not_running "Pound"
164                 RETVAL=$1
165         fi
166 }
167
168 pound_status() {
169         local stat=1 pidfile instance
170
171         nls "Configured Pound instances:"
172         echo " $POUND_INSTANCES"
173         nls "Currently active Pound instances:"
174         for pidfile in /var/run/pound/*.pid; do
175                 [ -f "$pidfile" ] || continue
176                 instance=${pidfile#/var/run/pound/}
177                 instance=${instance%.pid}
178                 is_up $instance && echo -n " $instance($(cat $pidfile))"
179                 stat=0
180         done
181         echo ""
182         exit $stat
183 }
184
185 if [ "$1" != status -a "$2" ]; then
186         POUND_INSTANCES="$2"
187 fi
188
189 RETVAL=0
190 # See how we were called.
191 case "$1" in
192   start)
193         start
194         ;;
195   stop)
196         stop
197         ;;
198   restart)
199         restart
200         ;;
201   try-restart)
202         condrestart 0
203         ;;
204   force-reload)
205         condrestart 7
206         ;;
207   flush-logs)
208         if [ -f /var/lock/subsys/pound ]; then
209                 for instance in $POUND_INSTANCES; do
210                         show "Rotating Pound logs for %s instance" $instance
211                         killproc --pidfile /var/run/pound/$instance.pid pound -USR1
212                         ret=$?
213                         if [ $ret != 0 ]; then
214                                 RETVAL=$ret
215                         fi
216                 done
217         else
218                 msg_not_running "Pound"
219                 RETVAL=7
220         fi
221         ;;
222   status)
223         pound_status
224         ;;
225   *)
226         msg_usage "$0 {start|stop|restart|try-restart|force-reload|flush-logs|status} [INSTANCE NAMES]"
227         exit 3
228 esac
229
230 exit $RETVAL
This page took 0.310447 seconds and 3 git commands to generate.