check_http.sh

Simple bash script using curl to check a website.
It works on HTTP and HTTPS.
Requirement: curl
Usage ./check_http.sh
Example:
./check_http.sh ‘http://oglobo.globo.com’ oglobo 1
OK – Site oglobo.globo.com key oglobo time 0.019 |’time’=0.019s;1

Here is the code:

#!/bin/bash
#Verificar um HTTPS
#Felipe Ferreira set 2013
URL=$1
KEY=$2
CRIT=$3
http_proxy=""
DEBUG=
if [ -z $CRIT ]; then
   echo "Usage $0   "
   exit 3
fi
TC=`echo ${URL} | awk -F. '{print \$1}' |awk -F/ '{print \$NF}'`
TMP="/tmp/check_http_sh_${TC}.tmp"
CMD_TIME="curl -k --location --no-buffer --silent --output ${TMP} -w %{time_connect}:%{time_starttransfer}:%{time_total} '${URL}'"
TIME=`eval $CMD_TIME`
if [ -f $TMP ]; then
   RESULT=`grep -c $KEY $TMP`
else
   echo "UNKOWN - Could not create tmp file $TMP"
#   exit 3
fi
TIMETOT=`echo $TIME | gawk  -F: '{ print \$3 }'`
if [ ! -z $DEBUG ]; then
echo "CMD_TIME: $CMD_TIME"
echo "NUMBER OF $KEY FOUNDS:  $RESULT"
echo "TIMES: $TIME"
echo "TIME TOTAL: $TIMETOT"
echo "TMP: $TMP"
ls $TMP
fi
rm -f $TMP
SURL=`echo $URL | cut -d "/" -f3-4`
MSGOK="Site $SURL key $KEY time $TIMETOT |'time'=${TIMETOT}s;${CRIT}"
MSGKO="Site $SURL has problems, time $TIMETOT |'time'=${TIMETOT}s;${CRIT}"
#PERFDATA HOWTO 'label'=value[UOM];[warn];[crit];[min];[max]
if [ "$RESULT" -ge "1" ] && [ $(echo "$TIMETOT < $CRIT"|bc) -eq 1 ]; then
   echo "OK - $MSGOK"
   exit 0
else
   echo "CRITICAL - $MSGKO"
   exit 2
fi

5 Thoughts

  1. Thanks so much for making this available — I had an F5 loadbalancer handing me redirect after redirect, because check_http doesn’t handle cookies. This check did exactly what I needed, and lets me verify that I’m getting good text on the final page loaded.

  2. How might this script be altered please to handle the passing in of either a username and password pair, or a certificate and privatekey pair (in PEM format)?
    I’d do it myself but I don’t know curl at all.
    Thanks.

Leave a Reply

Your email address will not be published. Required fields are marked *

*