#!/bin/sh # # check_primary for pound # PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH TOOL=`basename $0` TOOLDIR=/usr/local/cluster TMPDIR=/var/tmp TMPFILE=${TMPDIR}/${TOOL}.$$ HEARTBEAT=/usr/lib/heartbeat/heartbeat ############################################################################## # Variables ############################################################################## INITWAIT=60 INTERVAL=60 RETRYCOUNT=3 RETRYINTERVAL=20 FACILITY=local0 ADMIN=root CVIP=192.168.1.1 CHECKURL="http://${CVIP}/check.html" EXPECT="CHECK" ############################################################################## # Check pound service ############################################################################## checkHttp() { N=0 while true do isRunning if [ $? -ne 0 ]; then rm -f ${TMPFILE} return 0 fi wget -q --directory-prefix=${TMPDIR} --output-document="${TMPFILE}" "${CHECKURL}" RESULT=`test -f ${TMPFILE} && cat ${TMPFILE}` if [ "${RESULT}" = "${EXPECT}" ]; then rm -f ${TMPFILE} return 0 fi N=`expr ${N} + 1` if [ ${N} -gt ${RETRYCOUNT} ]; then break fi sleep ${RETRYINTERVAL} done rm -f ${TMPFILE} return 1 } ############################################################################## # Check cluster virtual IP address ############################################################################## checkIPaddr() { N=0 while true do isRunning if [ $? -ne 0 ]; then return 0 fi STATUS=`/etc/ha.d/resource.d/IPaddr ${CVIP} status` if [ "${STATUS}" = "running" ]; then return 0 fi N=`expr ${N} + 1` if [ ${N} -gt ${RETRYCOUNT} ]; then break fi sleep ${RETRYINTERVAL} done return 1 } ############################################################################## # Running heartbeat ? ############################################################################## isRunning() { /etc/init.d/heartbeat status > /dev/null 2>&1 RC=$? return ${RC} } ############################################################################## # Send mail ############################################################################## sendMail() { cat << _EOM_ | sendmail -t To: ${ADMIN} Subject: Warning: ${TOOL}: `hostname` $1 _EOM_ } ############################################################################## # Output syslog ############################################################################## outputLog() { logger -p ${FACILITY}.error -t ${TOOL} "$1" sendMail "$1" } ############################################################################## # Main ############################################################################## # Wait sleep ${INITWAIT} # loop while true do # mounted ? MP=`df ${MOUNTPOINT} | tail -1 | awk '{print $6}' 2> /dev/null` if [ "${MOUNTPOINT}" != "${MP}" ]; then sleep ${INTERVAL} continue fi # Check cluster virtual IP address checkIPaddr if [ $? -ne 0 ]; then outputLog "No IP address for cluster: ${CVIP}" ${HEARTBEAT} -k exit 100 fi # Check pound checkHttp if [ $? -ne 0 ]; then outputLog "Failed to http proxy service" ${HEARTBEAT} -k exit 100 fi sleep ${INTERVAL} done