Estoy buscando una manera de registrar el estado en línea/fuera de línea de un host Linux en un archivo de registro localmente.
Intenté usarlo ping
para esto pero no registró tiempos de espera/paquetes eliminados, solo muestra transmisiones exitosas:
ping -D 8.8.8.8 | awk 'NR>1 { printf strftime("%c", $0) "%s",$2; }' RS=[ FS=]
Mi 14 Okt 2015 13:03:06 CEST 64 bytes from 8.8.8.8: icmp_req=155 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:03:07 CEST 64 bytes from 8.8.8.8: icmp_req=156 ttl=55 time=18.6 ms
Mi 14 Okt 2015 13:03:08 CEST 64 bytes from 8.8.8.8: icmp_req=157 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:19 CEST 64 bytes from 8.8.8.8: icmp_req=244 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:20 CEST 64 bytes from 8.8.8.8: icmp_req=245 ttl=55 time=18.4 ms
Por lo tanto, tengo que mirar atentamente los números de solicitud para detectar estados fuera de línea.
¿Alguien conocía una mejor manera de hacerlo o puede nombrar una herramienta para esto?
Gracias de antemano.
Respuesta1
Ya hay muchas herramientas disponibles que hacen eso, como Munin, Nagios, etc. No veo por qué recrear la rueda, pero si quieres una solución shell, aquí va:
#!/bin/bash
logfile="/var/log/up-or-down.log";
ip_address_for_testing="192.168.1.10";
while [[ true ]]; do
ping -c 5 $ip_address_for_testing;
if [[ $? -eq 0 ]]; then
echo "IP status for ${ip_address_for_testing}: UP" >> $logfile;
else
echo "IP status for ${ip_address_for_testing}: DOWN" >> $logfile;
fi;
sleep 5;
done;
El ejemplo anterior enviará 5 SOLICITUDES DE ECO al host definido en $ip_address_for_testing y si todo va bien, escribirá en $logfile si está arriba o abajo. Guárdalo en un archivo, dale permisos de ejecución con chmod y llámalo a través de /etc/rc.local o /etc/rcS.d (si eliges la segunda opción, tendrás que guardarlo en /etc/init .d y cree un enlace simbólico) si desea iniciarlo en el momento del arranque.
¡Cya!