1#!@BASH_PATH@ 2 3# Authors: 4# Andrew Beekhof <abeekhof@redhat.com> 5# Fabio M. Di Nitto <fdinitto@redhat.com> 6# 7# License: Revised BSD 8 9# chkconfig: - 99 01 10# description: Pacemaker Cluster Manager 11# processname: pacemakerd 12# 13### BEGIN INIT INFO 14# Provides: pacemaker 15# Required-Start: $network $remote_fs corosync 16# Should-Start: $syslog 17# Required-Stop: $network $remote_fs corosync 18# Default-Start: 19# Default-Stop: 20# Short-Description: Starts and stops Pacemaker Cluster Manager. 21# Description: Starts and stops Pacemaker Cluster Manager. 22### END INIT INFO 23 24desc="Pacemaker Cluster Manager" 25prog="pacemakerd" 26 27# set secure PATH 28PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@" 29 30checkrc() { 31 if [ $? = 0 ]; then 32 success 33 else 34 failure 35 fi 36} 37 38success() 39{ 40 echo -ne "[ OK ]\r" 41} 42 43failure() 44{ 45 echo -ne "[FAILED]\r" 46} 47 48log() 49{ 50 logger -t pacemaker -p daemon.notice "$*" 51} 52 53notify() 54{ 55 log "$*" 56 echo -n "$*" 57} 58 59status() 60{ 61 pid=$(pidof $1 2>/dev/null) 62 local rtrn=$? 63 if [ $rtrn -ne 0 ]; then 64 echo "$1 is stopped" 65 if [ -f "@localstatedir@/run/$prog.pid" ]; then 66 rtrn=1 67 else 68 rtrn=3 69 fi 70 else 71 echo "$1 (pid $pid) is running..." 72 fi 73 return $rtrn 74} 75 76if [ -d @CONFIGDIR@ ]; then 77 [ -f @INITDIR@/functions ] && . @INITDIR@/functions 78set -a 79 [ -f @CONFIGDIR@/pacemaker ] && . @CONFIGDIR@/pacemaker 80 [ -f @CONFIGDIR@/sbd ] && . @CONFIGDIR@/sbd 81set +a 82fi 83 84LOCK_DIR="." 85if [ -d "@localstatedir@/lock/subsys" ]; then 86 LOCK_DIR="@localstatedir@/lock/subsys" 87elif [ -d "@localstatedir@/lock" ]; then 88 LOCK_DIR="@localstatedir@/lock" 89fi 90[ -z "$LOCK_FILE" ] && LOCK_FILE="$LOCK_DIR/pacemaker" 91 92# Check if there is a valid watchdog-device configured in sbd config 93if [ x != "x$SBD_WATCHDOG_DEV" -a "/dev/null" != "$SBD_WATCHDOG_DEV" -a -c "$SBD_WATCHDOG_DEV" ]; then 94 # enhance for unavailable chkconfig - don't touch sbd for now 95 if chkconfig --list sbd_helper 2>/dev/null | grep -q ":on"; then 96 SBD_SERVICE=sbd_helper 97 fi 98fi 99 100start() 101{ 102 notify "Starting $desc" 103 104 # most recent distributions use tmpfs for $@localstatedir@/run 105 # to avoid to clean it up on every boot. 106 # they also assume that init scripts will create 107 # required subdirectories for proper operations 108 mkdir -p "@localstatedir@/run" 109 110 if status $prog > /dev/null 2>&1; then 111 success 112 else 113 $prog > /dev/null 2>&1 & 114 115 # Time to connect to corosync and fail 116 sleep 5 117 118 if status $prog > /dev/null 2>&1; then 119 touch "$LOCK_FILE" 120 pidof $prog > "@localstatedir@/run/$prog.pid" 121 success 122 else 123 failure 124 rtrn=1 125 fi 126 fi 127 echo 128} 129 130stop() 131{ 132 shutdown_prog=$prog 133 if ! status $prog > /dev/null 2>&1; then 134 shutdown_prog="pacemaker-controld" 135 fi 136 137 if status $shutdown_prog > /dev/null 2>&1; then 138 notify "Signaling $desc to terminate" 139 kill -TERM $(pidof $prog) > /dev/null 2>&1 140 checkrc 141 echo 142 143 notify "Waiting for cluster services to unload" 144 while status $prog > /dev/null 2>&1; do 145 sleep 1 146 echo -n "." 147 done 148 else 149 echo -n "$desc is already stopped" 150 fi 151 152 rm -f "$LOCK_FILE" 153 rm -f "@localstatedir@/run/$prog.pid" 154 killall -q -9 pacemakerd pacemaker-attrd pacemaker-based \ 155 pacemaker-controld pacemaker-execd pacemaker-fenced \ 156 pacemaker-schedulerd 157 success 158 echo 159} 160 161rtrn=0 162 163case "$1" in 164start) 165 start 166;; 167restart|reload|force-reload) 168 stop 169 start 170;; 171condrestart|try-restart) 172 if status $prog > /dev/null 2>&1; then 173 stop 174 start 175 fi 176;; 177status) 178 status $prog 179 rtrn=$? 180;; 181stop) 182 stop 183 [ "x$SBD_SERVICE" != x ] && service $SBD_SERVICE stop 184;; 185*) 186 echo "usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}" 187 rtrn=2 188;; 189esac 190 191exit $rtrn 192