Created
May 14, 2015 08:46
-
-
Save Alambador/65dca25c0e73e7a08bc8 to your computer and use it in GitHub Desktop.
Shell Script To Monitor Services Such As Web / Http, Ssh, Mail Server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Shell script to monitor running services such as web/http, ssh, mail etc. | |
# If service fails it will send an Email to ADMIN user | |
# ------------------------------------------------------------------------- | |
# Copyright (c) 2006 nixCraft project <http://www.cyberciti.biz/fb/> | |
# This script is licensed under GNU GPL version 2.0 or above | |
# ------------------------------------------------------------------------- | |
# This script is part of nixCraft shell script collection (NSSC) | |
# Visit http://bash.cyberciti.biz/ for more information. | |
# ---------------------------------------------------------------------- | |
# See URL for more info | |
# http://www.cyberciti.biz/tips/processing-the-delimited-files-using-cut-and-awk.html | |
# --------------------------------------------------- | |
# Last updated: Jun - 15 - 2009. | |
ports="22 53 80 25" | |
# service names as per above ports | |
service="SSH DNS WEB MAIL" | |
#Email id to send alert | |
ADMINEMAIL="[email protected]" | |
#Bin paths, set them according to your Linux distro | |
NETSTAT=/bin/netstat | |
MAIL=/usr/bin/mail | |
LOGGER=/usr/bin/logger | |
ID=/usr/bin/id | |
# Red hat usr uncomment | |
MAIL=/bin/mail | |
LOGGER=/bin/logger | |
#Counters, set defaults | |
c=1 | |
status="" | |
sendmail=0 | |
# set the following to 1, if you want message in /var/log/messages via a SYSLOG | |
logtosyslog=0 | |
# Log file used to send an email | |
LOG="/tmp/services.log.$$" | |
# log message to screen and a log file | |
log(){ | |
echo "$@" | |
echo "$@" >> $LOG | |
} | |
# log message and stop script | |
die(){ | |
echo "$@" | |
exit 999 | |
} | |
# Make sure only root can run it | |
is_root(){ | |
local id=$($ID -u) | |
[ $id -ne 0 ] && die "You must be root to run $0." | |
} | |
# Look out for all bins and create a log file | |
init_script(){ | |
[ ! -x $MAIL ] && die "$MAIL command not found." | |
[ ! -x $NETSTAT ] && die "$NETSTAT command not found." | |
[ ! -x $LOGGER ] && die "$LOGGER command not found." | |
[ ! -x $ID ] && die "$ID command not found." | |
is_root | |
>$LOG | |
} | |
# check for all running services and shoot an email if service is not running | |
chk_services(){ | |
log "-------------------------------------------------------------" | |
log "Running services status @ $(hostname) [ $(date) ]" | |
log "-------------------------------------------------------------" | |
# get open ports | |
RPORTS=$($NETSTAT -tulpn -A inet | grep -vE '^Active|Proto' | grep 'LISTEN' | awk '{ print $4}' | cut -d: -f2 | sed '/^$/d' | sort -u) | |
# okay let us compare them | |
for t in $ports | |
do | |
sname=$(echo $service | cut -d' ' -f$c) | |
echo -en " $sname\t\t\t : " | |
echo -en " $sname\t\t\t : " >> $LOG | |
for r in $RPORTS | |
do | |
if [ "$r" == "$t" ] | |
then | |
status="YES" | |
sendmail=1 | |
break | |
fi | |
done | |
echo -n "$status" | |
echo "" | |
echo -n "$status" >>$LOG | |
echo "" >>$LOG | |
# Log to a syslog /var/log/messages? | |
# This is useful if you have a dedicated syslog server | |
[ $logtosyslog -eq 1 ] && $LOGGER "$sname service running : $status" | |
# Update counters for next round | |
c=$( expr $c + 1 ) | |
status="NO" | |
done | |
log "-------------------------------------------------------------" | |
log "This is an automatically generated $(uname) service status notification by $0 script." | |
if [ $sendmail -eq 1 ]; | |
then | |
$MAIL -s "Service Down @ $(hostname)" $ADMINEMAIL < $LOG | |
fi | |
} | |
### main ### | |
init_script | |
chk_services | |
### remove a log file ### | |
[ -f $LOG ] && /bin/rm -f $LOG |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment