summaryrefslogtreecommitdiff
path: root/recipes/corosync/files/init
blob: 7277ca905bc7796852f3fac3e250c798e274dc0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/bin/sh
#
# corosync       Start the Corosync Cluster Engine
#
# Author:       Andrew Beekhof <abeekhof@suse.de>
# License:      Revised BSD
#
# chkconfig: - 20 20
# processname:  corosync
# description:  Corosync Cluster Engine
#
### BEGIN INIT INFO
# Description: corosync....
#
# Short-Description: Corosync Cluster Engine.
# Provides: corosync
# Required-Start: $network
# Should-Start: $syslog
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 6
### END INIT INFO

do_force=0
prog="corosync"
lockfile="/var/lock/subsys/$prog"
configfile="/etc/corosync/corosync.conf"

if [ ! -f "$configfile" ]; then
	echo "Error: corosync is not configured ($configfile missing)"
	exit 1
fi

internal_status() {
    killall -0 corosync > /dev/null 2>&1
    return $?
}

status() {
    if
	! internal_status
    then
	echo "Stopped"
	return 7
    fi

    echo "Running"
    return 0
}

start() {
    echo -n $"Starting Corosync Cluster Engine ($prog): "
    if
	! internal_status
    then
	echo -n "starting... "
	$prog 2>&1 > /dev/null 2>&1
	echo -n "rc=$?: "
    fi

    sleep 2 # give it time to fail... $? isn't definitive

    if
	internal_status
    then
	echo "OK"
	return 0
    fi

    echo "Failed"
    return 1
}

do_force=1
do_forever=0

stop() {
    echo -n $"Stopping Corosync Cluster Engine ($prog): "

    killall -QUIT corosync

    if [ $do_forever = 0 ]; then
	for i in 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20; do
	    if
		internal_status
	    then
		sleep 2
		echo -n "."
	    else
		rm -f "$lockfile"
		echo "OK"
		return 0
	    fi
	done

	if [ $do_force = 1 ]; then
	    echo -n "Escalating... "
	    killall -KILL corosync
            pids=`pgrep -f '/usr/lib/heartbeat/*'`
            if [ -n "$pids" ]; then
                kill -KILL $pids
            fi
	    sleep 5

	    if
		! internal_status
	    then
		rm -f "$lockfile"
		echo "OK"
		return 0
	    fi
	fi

	echo "Failed"
	return 1
    fi

    while
        internal_status
    do
	sleep 1
	echo -n "."
    done

    rm -f "$lockfile"
    echo "OK"
    return 0
}

restart() {
    stop
    start
}

case "$1" in
    start|stop|restart)
        $1
        ;;
    force-stop)
	do_force=1
        stop
        ;;
    reload|force-reload)
        restart
        ;;
    condrestart|try-restart)
        [ ! -f "$lockfile" ] || restart
        ;;
    status)
        status $prog
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|try-restart|condrestart|reload|force-reload|force-stop|status}"
        exit 2
esac