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