Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- ##
- # Server Health Script
- # Executes Curl and checks the HTTP response code repeatedly. Sends an email if code is not 200 or 302.
- #
- # Example to check Google every 5 minutes silently, even after shell user logs out:
- # $ ./healthcheck.sh http://google.com Google 300 > /dev/null &
- ##
- if [ "$1" = "" ]; then
- echo -en "\nUsage: $0 <url> [title] [timer]\n\n"
- echo -en " url - Required. The page to target\n"
- echo -en "title - Optional. The title of this check, used in emails;\n"
- echo -en " if left blank, title will assume the url\n"
- echo -en "timer - If set, sleep in [timer] seconds after a check,\n"
- echo -en " otherwise execute checks back-to-back\n\n"
- echo -en "Exit codes:\n\n"
- echo -en "0 - success or canceled script\n"
- echo -en "1 - required parameters not provided\n\n"
- echo -en "Author: Carl Bennett\n"
- echo -en "License: CC-BY-SA 3.0\n\n"
- exit 1
- else
- URL=$1
- fi
- if [ "$2" = "" ]; then
- TITLE=$URL
- else
- TITLE=$2
- fi
- if [ "$3" = "" ]; then
- SLEEP_TIMER=0
- else
- SLEEP_TIMER=$3
- fi
- EMAIL_ADDRESS_FROM="server-health"
- EMAIL_ADDRESS_TO="noc"
- EMAIL_SUBJECT="Failure status notification for $TITLE"
- EMAIL_MESSAGE="Failed to retrieve a 200 OK status while checking $TITLE."
- i=0
- while true; do
- ((i++))
- echo -n "Check $i..."
- FIRSTLINE=`curl -s -D- -o/dev/null $URL | head -n 1`
- CODE=`echo -n "$FIRSTLINE" | awk '{print $2}'`
- if [ "$CODE" != "200" ] && [ "$CODE" != "302" ]; then
- echo "failed, sending email..."
- echo -ne "To: $EMAIL_ADDRESS_TO\nFrom: $EMAIL_ADDRESS_FROM\nSubject: $EMAIL_SUBJECT\n\n$EMAIL_MESSAGE\n\nURL: $URL\nStatus: $FIRSTLINE" | sendmail $EMAIL_ADDRESS_TO
- else
- echo "success."
- fi
- if [ $SLEEP_TIMER -ge 1 ]; then
- sleep $SLEEP_TIMER
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment