import
This commit is contained in:
		
							
								
								
									
										40
									
								
								network-watchdog.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								network-watchdog.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | USAGE="Usage: $0 <check target> [ <grace time seconds> ]" | ||||||
|  |  | ||||||
|  | TAG=network-watchdog | ||||||
|  | REMOTE_CHECK=${1:?$USAGE} | ||||||
|  | GRACE_TIME=${2:-1800} | ||||||
|  | STATE_FILE=${STATE_FILE:-/var/run/$TAG.state} | ||||||
|  |  | ||||||
|  | ping -c 4 -w 5 "${REMOTE_CHECK}" >/dev/null | ||||||
|  | if [ $? -ne 0 ] | ||||||
|  | then | ||||||
|  | 	# Failure | ||||||
|  | 	logger -p local0.alert -t $TAG "Remote host $REMOTE_CHECK is unavailable" | ||||||
|  | 	if [ ! -r "$STATE_FILE" ] | ||||||
|  | 	then | ||||||
|  | 		echo "$REMOTE_CHECK unavailable since $(date -Iseconds)" >"$STATE_FILE" | ||||||
|  | 		logger -p local0.info -t $TAG "Recorded failure in $STATE_FILE" | ||||||
|  | 	else | ||||||
|  | 		STATE_FILE_TS=$(date -r "$STATE_FILE" '+%s') | ||||||
|  | 		NOW=$(date '+%s') | ||||||
|  | 		logger -p local0.debug -t $TAG "Checking $STATE_FILE_TS & $NOW = $(( NOW - STATE_FILE_TS )) against gracetime=$GRACE_TIME" | ||||||
|  | 		if [ "$(( NOW - STATE_FILE_TS ))" -gt "$GRACE_TIME" ] | ||||||
|  | 		then | ||||||
|  | 			logger -p local0.crit -t $TAG "Remote host $REMOTE_CHECK has been unavailable for too long -- rebooting" | ||||||
|  | 			reboot | ||||||
|  | 		else | ||||||
|  | 			logger -p local0.notice -t $TAG "Not reached threshold yet" | ||||||
|  | 		fi | ||||||
|  | 	fi | ||||||
|  | else | ||||||
|  | 	if [ -r "$STATE_FILE" ] | ||||||
|  | 	then | ||||||
|  | 		rm ${STATE_FILE} | ||||||
|  | 		logger -p local0.notice -t $TAG "Remote host $REMOTE_CHECK back to normal" | ||||||
|  | 	else | ||||||
|  | 		logger -p local0.info -t $TAG "Remote host $REMOTE_CHECK all ok" | ||||||
|  | 	fi | ||||||
|  | fi | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user