|
Viernes, 06 de Noviembre de 2009 12:33 |
|
Este shell script monitorea servicios que estan activos en un servidor Linux.Â
#!/bin/bash # Shell script para monitorear servicios que estan corriendo en Linux tales como: # Dns, Pop3, Imap, web, ssh, mail, mysql, etc. # # Si el servicio falla, entonces se envia un email al SysOp # Last updated: 6/Nov/2009. # Probe: True #
# # Settings #
ports="ssh domain http smtp pop3 imap mysql pop3s imaps https"  # Nombre de los servicios service="SSH DNS HTTP MAIL POP3 IMAP MYSQL POP3S IMAPS HTTPS"  #Email del SysOp ADMINEMAIL="usuario@midominio.com"  NETSTAT=/bin/netstat MAIL=/usr/bin/mail LOGGER=/usr/bin/logger ID=/usr/bin/id MAIL=/bin/mail LOGGER=/bin/logger  c=1 status="" sendmail=0 logtosyslog=0 LOG="/tmp/services.log.$$" Â
log(){ Â Â Â Â Â Â Â echo "$@" Â Â Â Â Â Â Â echo "$@" >> $LOG } Â
die(){ Â Â Â Â Â Â Â echo "$@" Â Â Â Â Â Â Â exit 999 } Â
is_root(){ Â Â Â Â Â Â Â local id=$($ID -u) Â Â Â Â Â Â Â [ $id -ne 0 ]Â && die "You must be root to run $0." }
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 } Â
# Verificamos que todos los servicios esten activos y se envia un email si no estan activos chk_services(){        log "-------------------------------------------------------------"        log "Running services status @ $(hostname) [ $(date) ]"        log "-------------------------------------------------------------"         # Obtenemos los puertos        RPORTS=$($NETSTAT --tcp --listening --programs | grep -vE '^Active|Proto' | grep 'LISTEN' | awk '{ print $4}' | cut -d: -f2 )                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                [ $logtosyslog -eq 1 ] && $LOGGER "$sname service running : $status"                               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(s) Down @ $(hostname)" $ADMINEMAIL < $LOG        fi }  ### Programa Principal ### init_script chk_services  ### remove a log file ### [ -f $LOG ] && /bin/rm -f $LOG
|
|
Última actualización el Viernes, 06 de Noviembre de 2009 12:35 |