0,0 → 1,221 |
#!/bin/bash |
|
# |
# Script that checks if given sites are up and sends an e-mail if the are not. |
# You should not run this script on the same servers your monitoring, |
# neither should your e-mail account reside on a server behind same firewall as the sites your checking. |
# |
# Developer: oSource Development |
# DevTeam: Marcus Uddenhed |
# Version: 0.6.1 |
# Web: http://www.osource.se |
# Updated: 2017-10-30 |
# |
# Requires: heirloom-mailx (http://heirloom.sourceforge.net/mailx.html) |
# |
# Licensed under BSDL license, see license information on our homepage. |
# |
|
#### Global variables #### |
# Sites |
checkSite[1]="http://" # Add sites that you want to monitor, can be as many as you want. |
checkSite[2]="https://" |
|
# Retries |
rInterval=8 # How many times should it retry until it set the site as down. |
rTime=20 # How many seconds shold it wait between retries. |
|
# Mail |
sendMail=yes # Should i send an e-mail with failed sites. |
mailFrom="" # From whom shall this mail be sent? |
mailTo="" # To whom shall the mail be sent? |
smtpHost="" # The SMTP mail server that is going to process the mail. |
smtpAuth=yes # Does the SMTP mail server require authentication(yes/no). |
smtpUser="" # Username if smtpAuth is set to yes. |
smtpPass="" # password if smtpAuth is set to yes. |
smtpPort=587 # Standard for non authenticated SMTP is 25, 587 is for authenticated SMTP. |
mailBin="heirloom-mailx" # executable file for mailx. |
|
# Logging |
logStatus=yes # Should we log to local logfile(yes/no). |
logPath="/var/log" # Where should we put the log file(omit the traling slash). |
logName="oSiteChecker.log" # name of log file. |
|
#### Do not edit anything below unless you know what you are doing. #### |
|
check_sites() { |
# Declare $is variable |
is=0 |
|
# Start control |
for i in "${checkSite[@]}" |
do |
CURL=$(curl -s --head $i) |
if echo $CURL | grep "200 OK" > /dev/null |
then |
# add entry to log file if logging enabled |
if [ $logStatus == "yes" ] |
then |
echo `date +%F` `date +%T` "$i" "Host up" >> $logPath/$logName |
else |
# if logging set to no send to null |
echo "" > /dev/null |
fi |
else |
# Collect all sites that do not respond as they should for further processing. |
siteArray[ $is ]="${i}" |
(( is++ )) |
fi |
done |
|
# Check to see if any sites been reported as down. |
if [ ${#siteArray[@]} -ne 0 ] |
then |
# Test each failed site in a given amount of times. |
for ((n=1;n<=$rInterval;n++)) |
do |
# Go through failed sites again to eliminate temporary glicthes. |
for i in "${siteArray[@]}" |
do |
CURL=$(curl -s --head $i) |
if echo $CURL | grep "200 OK" > /dev/null |
then |
# remove succesful sites from array. |
delete=(${i}) |
siteArray=( "${siteArray[@]/$delete}" ) |
else |
# Keeps failed site in array. |
echo "" > /dev/null |
fi |
done |
|
# Clean empty lines in siteArray |
tmpArray=() |
for value in "${siteArray[@]}" |
do |
[[ $value != "" ]] && tmpArray+=($value) |
done |
siteArray=("${tmpArray[@]}") |
unset tmpArray |
|
# Debug |
#for i in "${siteArray[@]}" |
#do |
# echo ${i} |
#done |
|
# Sleeps for an amount of time between checking site status again. |
sleep $rTime |
done |
fi |
|
# notification action |
if [ ${#siteArray[@]} -ne 0 ] |
then |
#echo ${#siteArray[@]} |
# Send an email with status |
if [ $sendMail == "yes" ] |
then |
# Temp path for mailbody.txt |
tmpPath=/tmp |
|
# Set mail subject |
mailSubject="Connectivity test failed" |
|
# Build mail body |
echo "Hi" > $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "One or more servers is not responding as the should, see complete list below." >> $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
for i in "${siteArray[@]}" |
do |
echo ${i} >> $tmpPath/mailbody.txt |
done |
#echo "Test - Array size:" ${#siteArray[@]} >> $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "Sent:" `date +%Y-%m-%d` `date +%H:%M` >> $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "Regards" >> $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "Your $(cat /etc/hostname) server." >> $tmpPath/mailbody.txt |
|
# Send data |
MAILRC=/dev/null $mailBin -n |
if [ $smtpAuth = "no" ] |
then |
env MAILRC=/dev/null from=$mailFrom smtp=$smtpHost:$smtpPort $mailBin -v -n -s "$mailSubject" $mailTo <$tmpPath/mailbody.txt |
fi |
if [ $smtpAuth = "yes" ] |
then |
env MAILRC=/dev/null from=$mailFrom smtp=$smtpHost:$smtpPort smtp-auth-user=$smtpUser smtp-auth-password=$smtpPass smtp-use-starttls=yes ssl-verify=ignore smtp-auth=login $mailBin -n -s "$mailSubject" $mailTo <$tmpPath/mailbody.txt |
fi |
|
# Remove temporary mailbody.txt file |
rm $tmpPath/mailbody.txt |
else |
echo "" > /dev/null |
fi |
|
# add entry to log file if logging enabled |
if [ $logStatus == "yes" ] |
then |
for i in "${siteArray[@]}" |
do |
echo `date +%F` `date +%T` ${i} "Host down" >> $logPath/$logName |
done |
fi |
fi |
} |
|
mail_test() { |
# Temp path for mailbody.txt |
tmpPath=/tmp |
|
# Set mail subject |
mailSubject="Mail test" |
|
# Build mail body |
echo "Hi" > $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "This is a test mail to see that the mail function works." >> $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "Sent:" `date +%Y-%m-%d` `date +%H:%M` >> $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "Regards" >> $tmpPath/mailbody.txt |
echo "" >> $tmpPath/mailbody.txt |
echo "Your $(cat /etc/hostname) server." >> $tmpPath/mailbody.txt |
|
# Send data |
MAILRC=/dev/null $mailBin -n |
if [ $smtpAuth = "no" ] |
then |
env MAILRC=/dev/null from=$mailFrom smtp=$smtpHost:$smtpPort $mailBin -v -n -s "$mailSubject" $mailTo <$tmpPath/mailbody.txt |
fi |
if [ $smtpAuth = "yes" ] |
then |
env MAILRC=/dev/null from=$mailFrom smtp=$smtpHost:$smtpPort smtp-auth-user=$smtpUser smtp-auth-password=$smtpPass smtp-use-starttls=yes ssl-verify=ignore smtp-auth=login $mailBin -n -s "$mailSubject" $mailTo <$tmpPath/mailbody.txt |
fi |
|
# Remove temporary mailbody.txt file |
rm $tmpPath/mailbody.txt |
} |
|
script_help() { |
echo "Usage: oSiteChecker.sh <parameter>" |
echo "" |
echo "Parameters:" |
echo "--check Does a test connection to pre-configured sites and test to see if they are responding." |
echo "--mail-test Does a test on the mail function to see if all mail related settings are okay." |
} |
|
case $1 in |
--check) |
check_sites |
;; |
--mail-test) |
mail_test |
;; |
*) |
script_help |
;; |
esac |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
Added: svn:executable |
+* |
\ No newline at end of property |