Estado de los nodos
Anoche se puso en contacto conmigo Rubén para comentarme que mutoid (elxwifi) ya no podía seguir indicando el estado de los diferentes nodos de elxwifi.
Este listado de nodos es muy importante porque nos permite saber de un vistazo cómo está la red, pero depende de un nodo que tenga además acceso a Internet y mutoid
ya no cumple ese requisito. Era momento para un hack :).
Y con toda la razón. Anoche lo vi muy claro, pero no estoy ahora seguro de que sea la mejor forma de hacerlo :P. Por ahora it just works.
En primera instancia no iba a instalarlo en blackshell
porque este nodo no tiene una conexión a la red inalámbrica demasiado estable (por ahora, pronto scuba cambiará su hardware y mejorarán las condiciones). Si el nodo que verifica a los demás cae con frecuencia, se pierde efectividad en el invento :(.
La estrategia es simple: enviamos una petición ICMP
del tipo ECHO_REQUEST
(vamos, usando ping(8)
), con un pequeño margen para el error (en radio es frecuente que se pierda el primero de la serie), y dejamos en un servidor web con acceso desde Internet una imagen asociada a esa dirección IP
con una significado u otro según obtengamos respuesta o no.
#!/bin/sh # conf: dónde van las imágenes IMAGE_PATH="/var/www/htdocs/elxwifi" # conf: IPs a verificar IP_LIST="10.1.3.1 10.1.2.1 10.1.1.62 10.1.4.1 10.1.1.61 10.1.2.32\ 10.1.3.2 10.1.3.34 10.1.2.38" # de aqui para abajo mejor no tocar nada ############################################################ IMAGE_OK="ok.png" IMAGE_KO="ko.png" function verifica { try=0 while [ $try -lt 5 ] && ! ping -c 1 $1 2>&1 > /dev/null; do try=$(($try+1)) done # borramos la imagen vieja rm -f $1.png # link es bastante más eficiente que copiar if [ $try -lt 5 ]; then ln -s ok.png $1.png else ln -s ko.png $1.png fi } # ?r--r--r-- pero los links l-wx-wx-wx umask 0444 # los links relativos para que no de problemas # el chroot de Apache (OpenBSD ruls!) cd $IMAGE_PATH for ip in $IP_LIST; do # si queremos ejecutar en paralelo añadimos & verifica $ip done exit 1 # EOF
El script tampoco tiene nada del otro mundo. Verificamos hasta 5 pings, para evitar errores porque se pierdan los primeros paquetes, hasta desistir con ese nodo.
Esto puede hacer que si un nodo no está disponible restrase un poco la verificación del resto. Para evitar esa situación he metido en una función el código que hace la verificación de una dirección IP
, y añadiendo un & al final de su invocación podemos comprobar todas las direcciones en paralelo y evitar así retrasos (que incluso pueden ser importantes si cae un punto de acceso y, en consecuencia, todos los nodos asociados a él).
Ahora solo resta añadir una línea a nuestro crontab
para que se ejecute cada 15 minutos:
*/15 * * * * /home/usuario/bin/watchlink-sh
Notar que el script podría ser peligroso si le permitiéramos a un usuario dar la entrada a verifica
(por las llamadas a rm
y ln
basadas en esa entrada). En tal caso habría que comprobar el dato para estar seguros que nos proporcionan una IP
.
Hay 2 comentarios
Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.
por Ruben, en 2005-10-14 09:09:17 ∞