Xarx.es

Dèries. La meua llibreta d'anotacions.

Udev Y Monit. Resolviendo Problemas De Wview.


Wview es un software de wviewweather.com que permite obtener los datos de varios tipos de estaciones meteorológicas desde linux y genera una web estática actualizada desde los datos de la estación. También puede almacenar los datos en BD y enviar informes a diferentes servicios (AWEKAS, CWOP y
Weather Underground). Por ejemplo: Estación meteorológica en el Planetari de Castelló

Bien pues después de utilizarlo un tiempo aparecen 2 problemas esenciales para mantenerlo online:
1-. La estación está conectada a través de USB pero con un conversor cp2101. El problema es que algunas veces el sistema se reinicia pero enlazándose en /dev/ttyUSB1 en vez de /dev/ttyUSB0 que es el estándar.
2-. Alguna vez muere alguno de los procesos (wviewd o htmlgend) y deja de actualizarse la web. El origen todavía no lo tengo claro. Pero parece que wvpmon, que debería monitorizar los procesos y reiniciar el que falle, no lo hace correctamente.

Soluciones:
1-. para evitar que haya problemas con el cambio de puerto USB podemos incluir una nueva regla UDEV. Haremos que nuestro software apunte a un puerto "ficticio" wviewUSB y con la regla nueva crearemos un enlace simbólico de este puerto al que esté funcionando. Además podemos ejecutar un script para hacer reiniciarse a los procesos de wview…
# Regla udev para que cuando la estacion cambie de ttyUSB0 a 1 o
# viceversa se actualice un symlink de wviewUSB –> ttyUSB? (0 o 1)
# y se ejecute un script que reinicie wview. (Lo sgte todo en una linea)

SUBSYSTEMS=="tty", KERNEL=="ttyUSB?", NAME="%k", SYMLINK+="wviewUSB", RUN+="/etc/init.d/wview.udev"
2-. para reiniciar los procesos podríamos utilizar cron junto con algún script específico. Pero también podemos utilizar monit. Éste es un monitor de "eventos" que nos permite realizar acciones por ejemplo si el disco, la cpu o la ram están muy ocupadas o, como en este caso, si no se han generado los archivos de la estación.
Para ponerlo en marcha instalamos el paquete (sudo apt-get install monit) y deberemos editar los archivos /etc/default/monit (cambiar de startup=0 a startup=1) y /etc/monit/monitrc, que es donde realmente haremos los cambios:

# habilitar el servidor web interno de monit visible en http://localhost:2812/
set httpd port 2812 and
use address localhost # only accept connection from localhost. without: all
allow localhost # allow localhost to connect to the server and
allow admin:monit # require user ‘admin’ with password ‘monit’

# incluir las reglas de monitorizacion y sus efectos
check file Current.htm with path /usr/local/var/wview/img/Current.htm
if timestamp > 20 minute then exec "/etc/init.d/wview.monit"

check file tempdaycomp.png with path /usr/local/var/wview/img/tempdaycomp.png
if timestamp > 20 minute then exec "/etc/init.d/wview.monit"


Con esto conseguimos que se ejecute el script wview.monit si en 20 minutos no se ha actualizado una de las páginas web (Current.htm) o si no se ha actualizado uno de los gráficos. En teoría el archivo htm debería actualizarse una vez cada 5min y el gráfico una vez cada 10. Si no ocurre deberíamos hacer o bien que wview se reiniciase (wview restart) o bien que se reinicie el sistema completo. Incluso podríamos hacer que si la espera es de 20min que se reinicie wview y si pasa de 40min que se reinicie el equipo.

Comentarios