Testeo automático de conectividad en bash

He creado el script de más abajo para comprobar la conectividad de varios servidores, siempre que haya una desconexión total entre cliente y servidor, es decir, si lo que ha caído es un host virtual y el dispositivo donde está el mismo sigue con funciones de red, se considiera que hay conectividad. En mi caso, tengo ejecutándose en el mismo servidor donde alojo el blog y estoy pensando en instalarlo en la Raspi que tengo en casa haciendo otras funciones de networking.

El script envía un ping a los hosts que indiquemos en un archivo de texto. Si algun host no devuelve el ping, el script ejecuta el comando mail para enviar un email a los destinatarios para que realicen una comprobación manual. Si la máquina servidor tiene conectividad, no envia ningún email.

El script:

#!/bin/bash


## Dependencias: mailutils
## Debe estar instado algun servidor smtp como exim o ssmtp


SERVERFILE=/path/to/hosts #lista de hosts para comprobobar conectividad. Debe ser un path absoluto para cron.
MESSAGE=message.txt

if [ -f hostsnook ];
then
        rm hostsnook
fi


for S in $(cat $SERVERFILE); do
        ping -c4 -w5 $S > /dev/null 2> /dev/null || echo $S >> hostsnook
done

if [ -f hostsnook ];
then

        echo "Posible desconexión de los siguientes hosts:" > $MESSAGE
        echo "" >> $MESSAGE
        awk '{print "http://"$n}' hostsnook >> $MESSAGE
        echo "" >> $MESSAGE
        echo "Pincha los enlaces para comprobación manual de conectividad" >> $MESSAGE


        /usr/bin/mail -s "Aviso de desconexion en host" user@buzon.com usuario@buzon.com < $MESSAGE

fi

EL archivo /path/to/hosts tiene un formato como este:

laenredadera.net
google.com
sdafsdafdsafasdfasdfasdf.com
python.org
nmokoijkj.com

En caso de que algún servidor haya caído completamente, el script debería enviar un email con el siguiente mensaje:

Posible desconexión de los siguientes hosts:

http://sdafsdafdsafasdfasdfasdf.com
http://nmokoijkj.com

Pincha los enlaces para comprobación manual de conectividad

Por últmo, para ejecutar el script de manera periódica, hay que añadirlo a cron:

*/30 * * * * 	mail	bash /path/to/testServers.sh

El script de la ruta será ejecutado por el usuario mail cada treina minutos.

Este script no avisará de fallo en algunos casos, como que el host a comprobar tenga una IP compartida con servidores virtuales, o dará un falsto positivo por algún problema con la resolución de nombres de dominio.

Espero que haya sido útil.

Este post forma parte de la serie

1 comentario


  1. verdaderamente me sivio mucho para un trabajito.
    Lo unico me encantaria saber como hacer para que el mail lo envie el thunderbird.
    Desde ya muchas gracias!

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *