¿Alguna vez has querido monitorizar tu conexión a internet para detectar si cae o tiene perdida de paquetes, o monitorizar quizás un servidor en internet?
En esta ocasión os traigo un pequeño script bash para realizar esto. El script comprobará si existen perdida de paquetes a una IP en concreto y lo reflejará en el log del sistema, ademas, aprovecharemos y guardaremos la caída en un archivo llamado log_fails.txt.
El tema del aviso tambien se puede configurar para que os envie un SMS a cualquier móvil, un mail… un sin fin de posibilidades.
El script en cuestión seria este:
#!/bin/bash
SITIO1=8.8.8.8 # DNS de Google principal
SITIO2=8.8.4.4 # DNS de Google secundario
while true
do
ping -c8 ${SITIO1} >/dev/null 2>/dev/null
respuesta1=$? #Guardamos estado de stderr
if [ $respuesta1 -eq 1 ];
then
sleep 10 # Esperamos 10 segundos para realizar una 2º prueba
ping -c3 ${SITIO2} >/dev/null 2>/dev/null
respuesta2=$?
if [ $respuesta2 -eq 1 ];
then
logger SERVIDOR CAIDO. HORA: $(date)
echo "SERVIDOR CAIDO. HORA: $(date)" >> log_fails.txt
fi
fi
sleep 10 # Esperamos 10 segundos para volver a comprobar desde el inicio
done
Guardamos este archivo con el nombre check.sh por ejemplo….
Le damos permisos de ejecución y ejecutamos con &exit para que quede en proceso de 2º plano:
chmod +x check.sh
sh check.sh &exit
Como podeis observar registramos la caída con el comando logger. Esto simplemente añade una linea con el texto «SERVIDOR CAIDO. HORA: » en /var/log/messages…
Esta pequeña receta con pocas lineas, nos servirá de mucho si queremos monitorizar nuestra conexión a internet o cualquier otra IP de nuestra red o de internet.
Si lo que quereis es monitorizar es solamente una IP, tendreis que fijar en las variables ‘SITIO1’ y ‘SITIO2’ la misma IP.
Espero os sirva de ayuda.
Un saludo.
Hola amigo espero que estes bien, muy excelente tu proyecto ya lo monté pero quisiera saber como podria hacer ping a mas de 2 sitios
Hola.
Puedes repetir el mismo código para un sitio más, creando una variable por ejemplo SITIO3 con la ip del otro sitio y despues más abajo declarar otro IF para este sitio…
Para más de 2 sitios ya cambiaria el script utilizando quizas un fichero de texto como entrada de IPS y ir leyendo linea a linea con un bucle. De esta forma el código seria menos de la mitad y quedaria mucho más claro.
Un saludo!
Jajajja por dios, yo estaba en estos momentos haciendo mi propio script, hasta que me dio por googlearlo, jaja, Buen post 10 + para el post.
Pueden agregarle mas cosas como
notify-send INTERNET «CONEXION ESTABLECIDA» # Envia notificaion visual
spd-say -l es -t male2 «interent» #Lo dice de forma hablado
Salu2s
Muy bueno che, te hago una consulta, estoy queriendo hacer uno que al no tener ping con unos equipos apague el servidor, como podria hacerlo modificando directamente el tuyo?
Hola. Perdón pero soy muy ignorante. No sé cómo ejecutarlo, qué es eso de &exit?
Después dónde busco el logger?
Tengo que entrar por la ventanita esa donde parece que usara DOS hasta la ubicación dónde lo puse?
Gracias.
&exit lo usamos para dejar el script en background (por eso el caracter ‘&’) y exit para salir de la ejecución de ese comando que quedará en background gracias al &
El comando logger hace que los mensajes seguidos de doble comillas apazcan en nuestro sistema de log. Normalmente en /var/log/messages
Saludos.