Mi caso es muy particular, estaba limitado en un Solaris antiguo sin permisos de instalación con carencia de comandos y con versiones antiguas de estos. No quería ver lo que hace el script sino simplemente los resultados y que estos no fueran demasiado rápidos.
Exporte los datos de los hosts de la base de datos. Tenía las ips en dos campos diferentes según el tipo de host y este mismo valor también estaba en dos campos diferentes (no me digáis porque ya que yo no hice la base de datos) por lo que tuve que tener en cuenta todas esas condiciones. Os dejo el ejemplo por si alguien le sirve para adaptarlo.
#!/bin/bash
######################################################
##### DETECTOR DE CAIDAS DE HOSTS #####
######################################################
######################################## Nebur ###
######################################################
# Comprobamos que no queden archivos temporales
# generados por el script y los creamos.
if [ -e "temp" ]; then
rm -R temp
mkdir temp
else
mkdir temp
fi
touch ./temp/caidos
touch ./temp/recuperados
# Eliminamos " y espacios del archivo de datos
# ya que asi se exporto.
sed -e 's/\"//g' hosts.txt>hosts.int
sed -e 's/ /_/g' hosts.int>hosts
rm hosts.int
# Creamos un bucle infinito.
while test 1 != 0
do
# Recojemos los valores que necesitamos
# realizamos los pings y según el resultado
# lo escribimos en un archivo temporal
# llamado caidos o recuperados.
hora=`date "+%H:%M:%S"`
for linea in `cat hosts`
do
cod=`echo $linea | cut -d';' -f1`
descrip=`echo $linea | cut -d';' -f2`
tipo_m=`echo $linea | cut -d';' -f3`
tipo_v=`echo $linea | cut -d';' -f6`
ip_m=`echo $linea | cut -d';' -f4`
ip_v=`echo $linea | cut -d';' -f7`
baja_m=`echo $linea | cut -d';' -f8`
if [ "$baja_m" = "No" ]; then
if [ "$(ping $ip_m 2 | grep alive)" = "" ]; then
if [ "$(grep $ip_m ./temp/caidos)" = "" ]; then
echo "$cod;$descrip;$tipo_m;$ip_m;$hora" >> ./temp/caidos
fi
else
if [ "$(grep $ip_m ./temp/caidos)" != "" ]; then
echo "$cod;$descrip;$tipo_m;$ip_m;$hora" >> ./temp/recuperados
sed "/$ip_m/d" ./temp/caidos > ./temp/caidos_tmp
mv ./temp/caidos_tmp ./temp/caidos
fi
fi
else
if [ "$(ping $ip_v 2 | grep alive)" = "" ]; then
if [ "$(grep $ip_v ./temp/caidos)" = "" ]; then
echo "$cod;$descrip;$tipo_v;$ip_v;$hora" >> ./temp/caidos
fi
else
if [ "$(grep $ip_v ./temp/caidos)" != "" ]; then
echo "$cod;$descrip;$tipo_v;$ip_v;$hora" >> ./temp/recuperados
sed "/$ip_v/d" ./temp/caidos > ./temp/caidos_tmp
mv ./temp/caidos_tmp ./temp/caidos
fi
fi
fi
done
# Limpiamos la pantalla para que solo se muestre
# la lectura de caidos en color rojo y de
# recuperados en verde.
clear
echo ""
echo "###############################################"
echo "### Lista de hosts caidos y recuperados ###"
echo "###############################################"
echo ""
if [ "$(cat ./temp/caidos)" != "" ]; then
echo -e '\E[37;41m'"Hosts caidos"; tput sgr0
echo ""
for linea in `cat ./temp/caidos`
do
cod=`echo $linea | cut -d';' -f1`
descrip=`echo $linea | cut -d';' -f2`
tipo=`echo $linea | cut -d';' -f3`
ip=`echo $linea | cut -d';' -f4`
cuando=`echo $linea | cut -d';' -f5`
echo -e '\E[37;41m'"El equipo $cod - $descrip - $tipo - $ip a caido a las $cuando"; tput sgr0
done
fi
echo ""
if [ "$(cat ./temp/recuperados)" != "" ]; then
echo -e '\E[37;42m'"Hosts recuperados"; tput sgr0
echo ""
for linea in `cat ./temp/recuperados`
do
cod=`echo $linea | cut -d';' -f1`
descrip=`echo $linea | cut -d';' -f2`
tipo=`echo $linea | cut -d';' -f3`
ip=`echo $linea | cut -d';' -f4`
cuando=`echo $linea | cut -d';' -f5`
echo -e '\E[37;42m'"El equipo $cod - $descrip - $tipo - $ip a recuperado a las $cuando"; tput sgr0
done
fi
rm ./temp/recuperados
touch ./temp/recuperados
sleep 10
done
Al final tenía en la pantalla del terminal una posible lista de hosts caídos y recuperados que comprobaba 300 hosts con un intervalo de un minuto.
No hay comentarios:
Publicar un comentario