Meteoclimatic
Software => WeeWX => Mensaje iniciado por: Rubendgl en 10 de Octubre de 2019, 17:56:43
-
Saludos,
el problema es el siguiente:
Tengo weewx funcionando desde mediados de septiembre, todo correcto hasta hace 2 días que se ha vuelto loca la Pi. Han empezado a surgir errores por todas partes hasta que definitivamente he perdido el control total tanto por ssh como directamente desde teclado.
No me ha quedado otra que preparar todo en una nueva tarjeta y poner a funcionar de nuevo el sistema.
La sorpresa es que ahora solo me aparecen datos desde principios de octubre. Yo suponía que el datalogger almacenaba datos durante mas tiempo, pero no. Y ahora he perdido los meses anteriores.
Milagrosamente, un día antes de suceder el estropicio había realizado una copia del archivo weewx.sdb.
Si sustituyo el .sdb actual por la copia que tengo, los días restantes me los rellena el weewx con los datos del datalogger ???.
Gracias.
-
Hola
Sí. Borra o mueve a otro sitio el archivo weewx.sdb de /var/lib/weewx que tienes ahora y pon el que tienes de la copia de seguridad. Debería ser tan fácil como eso.
El datalogger guarda datos según el intervalo que le tengas puesto. Cada 5 minutos debería almacenar sobre 12 días, cada minuto sobre 2 días.
Haz el cambio de base de datos con weewx detenido.
Saludos
-
Correcto, cada 5 min. es como lo tengo configurado.
He renombrado el weewx.sdb a weewx.sdb_orig y copiado el del backup.
Ahora aparece el mes de agosto y octubre correctos pero septiembre solo aparece el último día.
En las gráficas solo aparecen los datos de octubre. Es posible que necesite tiempo para generar todo o debería salir ya ??.
-
Para weewx y ejecuta sudo wee_reports
Debería de generarte todos los informes.
-
Para los gráficos he encontrado esto en el foro de weewx:
The image files are generated at different frequencies depending on the period covered by the plot(day plots every archive period, month plots every 3 hours, year plots every 24hours).
Las imágenes son generadas a diferentes frecuencias dependiendo del periodo cubierto por el gráfico (el del día se genera cada actualización de weewx, el del mes cada 3 horas, el del año cada 24 horas).
O sea, que tocará esperar a esos intervalos
-
O de otra forma, si borras las imágenes en el directorio de publicación de la web, se regenerarán solas en el próximo periodo...
-
Muchas gracias a los dos.
He hecho las dos cosas que comentais y ahora si aparencen los datos en las gráficas de todos los meses.
Sin embargo, el mes de septiembre sigue saliendo sin datos en el sumario mensual que genera el archivo NOAA-2019-09.txt.
Me pregunto si es seguro borrarlo y esperar a que lo vuelva a generar de nuevo ??.
Otra cosa que me he fijado es que todos los archivos de la carpeta weewx/NOAA/ tienen permisos 644 y precisamente ese que no se actualiza los tiene 755.
Puede esto influir ?.
Gracias.
-
Permiso Valor Descripción
rw– ––– –— 600 El propietario tiene permisos de lectura y escritura
rwx ––x ––x 711 El propietario lectura, escritura y ejecución, el grupo y otros solo ejecución
rwx r-x r-x 755 El propietario lectura, escritura y ejecución, el grupo y otros pueden leer y ejecutar el archivo
rwx rwx rwx 777 El archivo puede ser leído, escrito y ejecutado por quien sea
r–– ––– –— 400 Solo el propietario puede leer el archivo, pero ni el mismo puede modificarlo o ejecutarlo y por supuesto ni el grupo ni otros pueden hacer nada en el
rw- r-– ––– 640 El usuario propietario puede leer y escribir, el grupo puede leer el archivo y otros no pueden hacer nada
Como verás el 755 es superior al 644 y no debería entorpecer la generación, mas bien parece que si no has partido de un buen backup has perdido varios días de datos.
Mi consejo: incorpora una buena política de copia de base de datos y exportación de tablas para minimizar el peligro de pérdida de datos con caracter diario.
Aún así, de cuando en cuando se pueden perder datos, pero siempre serán mínimos periodos de tiempo. En mi caso he tenido corrupción de memoria del dataloger y pierdo algunos minutos si la hora estaba mal o si había registros erróneos en él.
Weewx no es un programa que rueda y ya está, es un programa en un entorno linux que muchos no conocen bien y que además rueda de forma crítica en plan 24/7/365 y por tanto hereda sus ventajas y sobre todo también sus complicaciones.
Por otra parte y volviendo a tu problema, si borras uno o varios ficheros mensuales NOAA, el sistema en cuanto lo pares y arranques los volverá a generar si tienen suficientes datos.
Salu2
Xavi
-
Pues efectivamente a veces las cosas son mas sencillas de lo que parece.
Borrar archivo y generar de nuevo. Tan fácil como eso. Ya he recuperado todos los datos.
Para finalizar una última pregunta, espero, sobre esto.
Para realizar la copia de seguridad de la base de datos debo detener el programa ???.
O puedo crear un script para realizar el proceso y añadirlo al cron y que se ejecute automáticamente ??.
He leido por algún lado esto pero dudo si así puede generar datos erroneos al estar funcionando el programa.
Saludos.
-
Para finalizar una última pregunta, espero, sobre esto.
Para realizar la copia de seguridad de la base de datos debo detener el programa ???.
O puedo crear un script para realizar el proceso y añadirlo al cron y que se ejecute automáticamente ??.
He leido por algún lado esto pero dudo si así puede generar datos erroneos al estar funcionando el programa.
Saludos.
Lo mejor es pararlo. A weewx como a cualquier programa no le gusta que se maneje o esté abierta la base de datos cuando está escribiendo.
Te pongo el script que yo tengo para la copia de seguridad tanto de la base de datos como del archivo de configuración weewx.conf en un pendrive:
#!/bin/bash
mount|grep -q "/mnt/usb" || mount /dev/sda1 /mnt/usb
/etc/init.d/weewx stop
tar czf /mnt/usb/weewx.tar.gz -C /var/lib/weewx weewx.sdb -C /etc/weewx weewx.conf
/etc/init.d/weewx start
Tendrás que crear una carpeta llamada usb en la carpeta /mnt de la raspi (sudo mkdir /mnt/usb)
El script detectará si hay memoria usb y la copiará en ella. Si no es sda1 el pendrive pon en el script el que es.
Creo que también está por ahí un script para enviarla por FTP en el foro.
Para el cron usas el crontab de root (sudo crontab -e)
2 0 * * * /home/pi/copiaweewx.sh
Esa línea te hará la copia de seguridad con el script en /home/pi cada día a las 0:02
Dale al script permisos de ejecución (sudo chmod +x copiaweewx.sh)
Adjunto el script ya en el mensaje.
En cuanto a los permisos es como te explica Xavi. De las tres cifras la primera es la del propietario (user) donde un 1 es permiso de ejecución (x), un 2 es permiso de escritura (w) y un 4 es permiso de lectura (r). Se pueden sumar y las tres juntas hacen el 7 (todos los permisos rwx). Las otras dos cifras son grupo y otros.
Si el archivo es propiedad de root y se usa el usuario pi el 7 en "otros" le dará todos los permisos.
Saludos
-
Muchas gracias, lo probaré.
Un saludo,
-
Buenos días,
regreso con unas dudillas sobre este tema.
jmviper, he probado tu script y desconozco el motivo pero no me ha funcionado.
Me aparece una copia pero no sale con el tamaño que debería y además está corrupta, no se el motivo.
Al final he optado por modificar fstab para que se automonte el pendrive y hacer una copia directa y fin del problema.
#!/bin/bash
/etc/init.d/weewx stop
cp -r /var/lib/weewx /media/weewxsdb
/etc/init.d/weewx start
La cuestión es la siguiente, desde que tengo esto funcionando me han aparecido dos incidencias de perdida de lluvia, un día 0,2mm y otro 0.6mm.
Pregunto: Es posible que sea durante el tiempo que el weewx está parado haciendo la copia ??.
Yo entiendo que no ya que el datalogger almacena los datos y los recupera el weewx al iniciarse, estoy en lo cierto ??.
Saludos
-
Hola
Pues lo mejor será ver si faltan esos tiempos en la base de datos (tabla archive)... cada cuanto graba registros weewx ? cada minuto o cada 5 minutos ?
No creo que tarde más de 1 minuto en copiar la BBDD y en ese intervalo deje de grabar un registro. Como tú dices debería tirar de datalogger.
Según veo en tu script has optado por copiarla directamente al pendrive sin comprimirla. No debería de corromperla tar czf (por lo menos a mí no me la corrompe). Ten en cuenta que cada vez la base de datos será más y más grande y tardará más en copiarla y el tiempo que esté parado weewx.
Saludos
-
Una cosa es hacer un backup copiando el archivo de datos y entonces si que conviene parar la BBDD, pero con sistemas de gestión de bases de datos SQL tal como SQLSERVER, ORACLE,etc, no es imprescindible pararla.
A nivel básico se pueden hacer copias de 3 formas o niveles.
1- Parando y copiando los archivos físicos donde están los datos o sea sacando una "foto".
2- Haciendo un dump o volcado de la base de datos de forma total.
3- Haciendo exportación de las tablas de la base de datos.
El sistema primero es totalmente físico. Yo uso este script:
#!/bin/bash
#
#Definimos la fecha y el nombre de la carpeta
fecha=$(date +"%Y_%m_%d")
carpeta="backup_$fecha"
#
#Se monta el disco en red
#mount 192.168.0.78:/datos /mnt/nfs
mount -t vfat /dev/sdb /mnt/nfs
#
#Vamos al directorio donde hacemos la copia
cd /mnt/nfs/weewx/backup/
#
#Creamos la carpeta del dia
mkdir $carpeta
#
#Entramos en la carpeta generada
cd $carpeta
#
tar -cf var-lib-weewx.tar /var/lib/weewx/*
#
#Salimos del directorio
cd /
#Desmontamos el disco de red
umount /mnt/nfs
#
exit 0
Para el segundo sistema este:
#!/bin/sh
#
# dump_archive.sh
#
# requires sqlite3 (apt install sqlite3)
# adjust following line with path/file.sdb
DBFILE="/var/lib/weewx/weewx.sdb"
# dump
echo "Dump BBDD archive file $DBFILE to $DBFILE.dump.gz"
echo '.dump' | sqlite3 $DBFILE | gzip -c >$DBFILE.dump.gz
mv $DBFILE.dump.gz /home/pi/
Y para el tercer tipo de copia este script:
cd /home/pi
# sqlite3 /var/lib/weewx/weewx.sdb 'select * from archive;' > dump_archive.txt
DBFILE="/var/lib/weewx/weewx.sdb"
# dump
echo "Dump sqlite archive file $DBFILE to $DBFILE.dump.gz"
echo 'select * from archive;' | sqlite3 $DBFILE | gzip -c >/home/pi/dump_archive.txt.gz
Evidentemente están personalizados con mis puntos de montaje, mis directorios, etc.
Para recuperar cada tipo es diferente, el primero se hace parando y fisicamente copiando el fichero con la BBDD weewx.
El segundo habría que generar una BBDD vacía o borrar contenidos de tablas y hacer una importación del fichero dump.
El tercero es el que uso mas a menudo en caso de problemas ya que para recuperar meto una base de datos anterior y hago importación de las tables, habiendo eliminado antes las cabeceras con las creaciones o borrados que lleva en el código. Como por defecto no pueden haber campos duplicados solo se importan los registros que no existen previamente en la BBDD o sea que la actualizo al punto de cuando se sacó el backup.
Normalmente con las Davis y su dataloger, paro BBDD, recupero una anterior, hago la importación y luego actualizo con el contenido del dataloger hasta ponerme al día, normalmente no pierdo ni un solo periodo de datos aunque para reparar haya parado varias horas o incluso con una rotura de finales de agosto (malditas SD) habiendo parado un dia entero.
Saludos.
Espero que esta disertación sobre métodos de copia de sistemas de bases de datos SQL sea de ayuda para alguien.
Chao, 73 de Xavi, EA5ZF