Autor Tema: Ayuda con script para reinicio de Weewx  (Leído 1923 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Conectado manolodos

  • Sr. Member
  • ****
  • Mensajes: 326
    • Ver Perfil
  • Estación: Málaga - Bda. Girón ESAND2900000029003A / Málaga-Colegio Const-1978 ESAND2900000029003B / Navas de San Juan-Sierra ESAND2300000023240A / Nerja - Las Palmeras ESAND2900000029780B
Ayuda con script para reinicio de Weewx
« en: 27 de Noviembre del 2022, 19:36:02 pm »
Buenas tardes
Tengo una raspberry que maneja tres estaciones remotas con Weewx
Hay 3 instancias de Weewx funcionando, y de vez en cuando alguna se detiene,  normalmente por fallo en la captura de datos.
Buscando en la red, encontré un script, que una vez adaptado a mi situación, reinicia el servicio weewx si detecta que está parado
Me funcionaba bien con una sola instancia de weewx, pero no funciona con más de una, ya que se basa en que exista o no exista un proceso de nombre weewx, y con 3 instancias, pues aunque haya una parada siguen existiendo 2 procesos mas con nombre weewx

Aquí el script:

#!/bin/bash
RESTART="/etc/init.d/weewx restart"
PGREP="/usr/bin/pgrep"
MEMCACHED="weewx"
# buscamos que exista el proceso
$PGREP ${MEMCACHED}
# sino existe id de proceso y el comando anterior devuelve 0
if [ $? -eq 1 ]
then
$RESTART
fi

Alguien me puede ayudar, por favor ?
Gracias

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Ayuda con script para reinicio de Weewx
« Respuesta #1 en: 28 de Noviembre del 2022, 15:32:59 pm »
Hola manolodos

Tendrá diferente nombre cada instancia en /etc/init.d no ??

Sería cuestión de que chequeara cada instancia.

Ponle el argumento -f a pgrep para que lea toda la línea del proceso (por defecto solo lee los 15 primeros caracteres).

PGREP="/usr/bin/pgrep -f"




Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Conectado manolodos

  • Sr. Member
  • ****
  • Mensajes: 326
    • Ver Perfil
  • Estación: Málaga - Bda. Girón ESAND2900000029003A / Málaga-Colegio Const-1978 ESAND2900000029003B / Navas de San Juan-Sierra ESAND2300000023240A / Nerja - Las Palmeras ESAND2900000029780B
Re:Ayuda con script para reinicio de Weewx
« Respuesta #2 en: 28 de Noviembre del 2022, 16:57:06 pm »
Hola jmviper
Gracias por tu respuesta
Sí, cada instancia tiene nombre diferente
Añadiendo -f no hace nada distinto
La salida de ps -axjf es
1 11871 11870 11870 ?           -1 Sl       0 165:31 /usr/bin/python3 /home/weewx/bin/weewxd --daemon --log-label weewx-islantilla --pidfile=/var/run/weewx-islantilla.pid /etc/weeewx/islantilla 

1 23590 23589 23589 ?           -1 Sl       0  84:50 /usr/bin/python3 /home/weewx/bin/weewxd --daemon --log-label weewx-nerja --pidfile=/var/run/weewx-nerja.pid /etc/weewx/nerja

1 27691 27690 27690 ?           -1 Sl       0  24:57 /usr/bin/python3 /home/weewx/bin/weewxd --daemon --log-label weewx-baronia --pidfile=/var/run/weewx-baronia.pid /etc/weewx/baronia
La segunda columna es el PID
La salida del script es simplemente los 3 PID de los 3 procesos weewx

Conectado jantoni

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.070
    • Ver Perfil
  • Estación: M720 | M1914 (Pruebas Meteoclimatic)
Re:Ayuda con script para reinicio de Weewx
« Respuesta #3 en: 28 de Noviembre del 2022, 20:10:07 pm »
Uffffff.......yo ya no me acuerdo, hice eso hace mucho mucho tiempo.....

Pero, veo algo que no me cuadra

Código: [Seleccionar]
RESTART="/etc/init.d/weewx restart"
Debería ser

Código: [Seleccionar]
RESTART="/etc/init.d/weewx restart islantilla"
o

Código: [Seleccionar]
RESTART="/etc/init.d/weewx restart inerja"
o

Código: [Seleccionar]
RESTART="/etc/init.d/weewx restart baronia"
Por otro lado no acabo de entender el script....lo cual no es extraño, ja ja ja.

¿Me podéis traducir lo que significa

if [ $? -eq 1 ]      ????
No respondo consultas por mensajería personal.

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

Home Assistant + GW1000 + WH2650
Sensores: WH32P + WS65 + WH31 (3) + WH41 + WH32

Conectado manolodos

  • Sr. Member
  • ****
  • Mensajes: 326
    • Ver Perfil
  • Estación: Málaga - Bda. Girón ESAND2900000029003A / Málaga-Colegio Const-1978 ESAND2900000029003B / Navas de San Juan-Sierra ESAND2300000023240A / Nerja - Las Palmeras ESAND2900000029780B
Re:Ayuda con script para reinicio de Weewx
« Respuesta #4 en: 28 de Noviembre del 2022, 20:49:02 pm »
Hola jantoni

RESTART="/etc/init.d/weewx restart islantilla"

Claro, es lo que debería ser, si el script distinguiera que es esa instancia la que está detenida
Este script sólo determina si hay algún proceso con nombre weewx corriendo, y con 3 instancias, aunque haya una detenida, no lo reinicia

Supongo que habría que modificar el script para que pregunte por cada uno de los 3 procesos, y según cual esté parado, proceder a reniciarlo
O escribir uno completamente nuevo.....( yo también hace mucho tiempo, y estoy muy muy desentrenado  :; )

Conectado jantoni

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.070
    • Ver Perfil
  • Estación: M720 | M1914 (Pruebas Meteoclimatic)
Re:Ayuda con script para reinicio de Weewx
« Respuesta #5 en: 28 de Noviembre del 2022, 21:13:10 pm »
Yo miraría el procedimiento de watchdog que hay para weewx y que ya se comentó por aquí por un usuario

https://forum.meteoclimatic.net/index.php?topic=2509.0

Evidentemente habrá que adaptarlo a multi instancia
No respondo consultas por mensajería personal.

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

Home Assistant + GW1000 + WH2650
Sensores: WH32P + WS65 + WH31 (3) + WH41 + WH32

Conectado manolodos

  • Sr. Member
  • ****
  • Mensajes: 326
    • Ver Perfil
  • Estación: Málaga - Bda. Girón ESAND2900000029003A / Málaga-Colegio Const-1978 ESAND2900000029003B / Navas de San Juan-Sierra ESAND2300000023240A / Nerja - Las Palmeras ESAND2900000029780B
Re:Ayuda con script para reinicio de Weewx
« Respuesta #6 en: 28 de Noviembre del 2022, 22:26:31 pm »
Ya lo tengo, pero son 3 scripts, 1 para cada instancia
Como me dijo jmviper, con pgrep -f
Me queda programarlo en crontab

comprobarislantilla.sh

#!/bin/bash
RESTART="sudo /etc/init.d/weewx restart islantilla"
PGREP="/usr/bin/pgrep -f"
MEMCACHED="weewx-islantilla"
# buscamos que exista el proceso
$PGREP ${MEMCACHED}
# sino existe id de proceso y el comando anterior devuelve 0
if [ $? -eq 1 ]
then
$RESTART
fi


Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Ayuda con script para reinicio de Weewx
« Respuesta #7 en: 28 de Noviembre del 2022, 22:36:38 pm »

Supongo que habría que modificar el script para que pregunte por cada uno de los 3 procesos, y según cual esté parado, proceder a reniciarlo


Por ahí irían los tiros. Un bloque de esos para cada estación.

Con pgrep tendrías que ver que estuviese ese nombre diferente para cada una y que lo reiniciase.


¿Me podéis traducir lo que significa

if [ $? -eq 1 ]      ????


La salida de la ejecución del último comando. En este caso si pgrep devuelve 1 (falso) reinicia weewx. Curioso... casi todos los lenguajes de programación tratan el 1 como true y el 0 como false... menos bash…

P.D. bueno viendo esto último por la web resulta que 0 lo devuelve para una salida normal sin errores y si no, devuelve otro número como código de error siendo el 1 un error general.
« Última modificación: 28 de Noviembre del 2022, 22:46:16 pm por jmviper »


Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Conectado manolodos

  • Sr. Member
  • ****
  • Mensajes: 326
    • Ver Perfil
  • Estación: Málaga - Bda. Girón ESAND2900000029003A / Málaga-Colegio Const-1978 ESAND2900000029003B / Navas de San Juan-Sierra ESAND2300000023240A / Nerja - Las Palmeras ESAND2900000029780B
Re:Ayuda con script para reinicio de Weewx
« Respuesta #8 en: 28 de Noviembre del 2022, 23:18:21 pm »

Supongo que habría que modificar el script para que pregunte por cada uno de los 3 procesos, y según cual esté parado, proceder a reniciarlo


Por ahí irían los tiros. Un bloque de esos para cada estación.

Con pgrep tendrías que ver que estuviese ese nombre diferente para cada una y que lo reiniciase.

Sí, con pgrep - f salen los 3 procesos con diferentes nombres, weewx-nerja,  etc

Probado y funcionando con 3 scripts, 1 por estación
En crontab lo he programado cada 15 minutos y con un intervalo de 1 minuto entre cada uno de los 3 scripts

Gracias de nuevo