Merge commit 'origin/master'
[metze/ctdb/wip.git] / config / events.d / 41.httpd
1 #!/bin/sh
2 # event script to manage httpd in a cluster environment
3
4 . $CTDB_BASE/functions
5 loadconfig ctdb
6
7 detect_init_style
8
9 case $CTDB_INIT_STYLE in
10         redhat)
11                 CTDB_SERVICE_HTTP="httpd"
12                 CTDB_CONFIG_HTTP="http"
13                 ;;
14         suse)
15                 CTDB_SERVICE_HTTP="apache2"
16                 CTDB_CONFIG_HTTP="apache2"
17                 ;;
18         debian)
19                 CTDB_SERVICE_HTTP="apache2"
20                 CTDB_CONFIG_HTTP="apache2"
21                 ;;
22         *)
23                 # should not happen.
24                 # for now use red hat style as default
25                 CTDB_SERVICE_HTTP="httpd"
26                 CTDB_CONFIG_HTTP="http"
27                 ;;
28 esac
29
30 loadconfig "${CTDB_CONFIG_HTTP}"
31
32 [ "$CTDB_MANAGES_HTTPD" = "yes" ] || exit 0
33
34 cmd="$1"
35 shift
36
37 # RHEL5 sometimes use a SIGKILL to terminate httpd, which then leaks
38 # semaphores.  This is a hack to clean them up.
39 cleanup_httpd_semaphore_leak() {
40     killall -q -0 "${CTDB_SERVICE_HTTP}" ||
41     for i in $(ipcs -s | awk '$3 == "apache" { print $2 }') ; do
42         ipcrm -s $i
43     done
44 }
45
46 case $cmd in
47     startup)
48         cleanup_httpd_semaphore_leak
49         service "${CTDB_SERVICE_HTTP}" start
50         ;;
51
52     shutdown)
53         service "${CTDB_SERVICE_HTTP}" stop
54         killall -q -9 "${CTDB_SERVICE_HTTP}"
55         ;;
56
57      monitor)
58         ( ctdb_check_tcp_ports "http" 80 )
59         if [ $? -ne 0 ] ; then
60             echo "HTTPD is not running. Trying to restart HTTPD."
61             cleanup_httpd_semaphore_leak
62             service "${CTDB_SERVICE_HTTP}" start
63             exit 1
64         fi
65         ;;
66 esac
67
68 exit 0
69