#!/usr/bin/env bash RETRIES=3 SLEEP=2 UPTIME=600 LOG="/var/log/${0}.log" # Help if [[ "$#" -lt 2 ]] ; then cat <<-EOF Web Monitor Script - Nimpen <nimpen@asbra.nu> Example: $0 https://google.com 'echo "Google is down!" | mail j@asbra.nu' EOF exit 1 fi # Set Argument Values [[ -n "$1" ]] && SITE="$1" [[ -n "$1" ]] && COMMAND="$2" # HTTP Status Codes declare -A R=( [000]="Connection Failed" [200]="Successful" [301]="Moved Permanently" [302]="Moved Temporarily" [400]="Bad Request" [401]="Unauthorized" [403]="Forbidden" [404]="Not found" [500]="Internal Server Error" [502]="Bad Gateway" [503]="Service Unavailable" [504]="Gateway Timeout" ) # Curl Return Codes declare -A E=( [0]="Successful" [6]="Could not resolve" [7]="Refused" [16]="HTTP/2 error" [28]="Time out" [35]="TLS/SSL connect error" [45]="Interface error" [52]="server did not reply" [56]="Failure in receiving network data" ) # Wait After Server Reboot EPOCH_UPTIME=$(date -d"$(uptime -s)" +%s) EPOCH_NOW=$(date +%s) [[ "$((${EPOCH_NOW}-${EPOCH_UPTIME}))" -lt ${UPTIME} ]] && exit 1 # Check Service Availiability Loop UP=0 ; CNT=0 ; while [[ ${UP} -ne 200 ]] do let CNT++ UP=$(curl --connect-timeout 1 -s -o /dev/null -w "%{http_code}" ${SITE}) [[ ${UP} -ne 200 ]] && echo "$(date +'%Y-%m-%d %H:%M:%S') SITE:${SITE}, RETURN:${UP} ${R[$UP]}, EXIT:${?} ${E[$?]}, COUNT:${CNT}" | tee -a ${LOG} [[ ${CNT} -eq ${RETRIES} ]] && { $COMMAND ; exit 1 ; } sleep ${SLEEP} done
Web Monitor Script
Simple script for monitoring of a web service using curl