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 sobre “Testeo automático de conectividad en bash

Deja un comentario

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