#!/bin/sh # # check_primary for PostgreSQL # PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH TOOL=`basename $0` TOOLDIR=/usr/local/cluster TMPFILE=/tmp/${TOOL}.$$ HEARTBEAT=/usr/lib/heartbeat/heartbeat ############################################################################## # Variables ############################################################################## INITWAIT=60 INTERVAL=60 RETRYCOUNT=3 RETRYINTERVAL=20 FACILITY=local0 ADMIN=root CVIP=172.16.0.1 MOUNTPOINT=/data PGUSER=postgres DBNAME=check CHECKSQL="SELECT val FROM check01 WHERE num = '00000001'" CHECKRESULT="00000001 " ############################################################################## # Check PostgreSQL service ############################################################################## checkPostgresql() { N=0 while true do isRunning if [ $? -ne 0 ]; then rm -f ${TMPFILE} return 0 fi RESULT=`echo "${CHECKSQL}" |\ psql -h 127.0.0.1 -U ${PGUSER} -A -t ${DBNAME} 2> /dev/null` if [ "${RESULT}" = "00000001 " ]; 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 PostgreSQL checkPostgresql if [ $? -ne 0 ]; then outputLog "Failed to PostgreSQL service" ${HEARTBEAT} -k exit 100 fi sleep ${INTERVAL} done