Utilice el soporte de vigilancia de systemd para reiniciar la aplicación

Utilice el soporte de vigilancia de systemd para reiniciar la aplicación

Tengo una systemdunidad de servicio simple para reiniciar mi pythonscript en salidas incondicionales definidas Restart=alwaysen la definición del servicio. Solo quiero asegurarme absolutamente de que incluso si el script se bloquea de alguna manera, puedo reiniciarlo habilitando la WatchdogSec=variable en el archivo de la unidad.

Mi problema es eldocumentos oficiales para el diario de systemdno lo explica claramente.

Citando de la misma página,

WatchdogSec=

Configura el tiempo de espera de vigilancia para un servicio. El perro guardián se activa cuando se completa la puesta en marcha. El servicio debe llamar sd_notify(3)periódicamente "WATCHDOG=1"(es decir, el "ping de mantenimiento de vida").

La parte que no está clara es siserviciose encarga de mantener los pings con el servicio de vigilancia (o) la aplicación que está ejecutando (en mi caso, el script Python) necesita mantener el ping actualizando la variable de entorno mencionada.

Mi definición de servicio simple

[Unit]
Description=dev-Status: Computes RF device availability status
           
[Service]
Type=simple

EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
RestartSec=10
Restart=always
         
[Install]
WantedBy=default.target

Entonces, si a este archivo de servicio le agrego la siguiente línea, ¿reiniciaría mi script automáticamente?

WatchdogSec=30s

Respuesta1

Para "palmar" o hacer ping al perro guardián, puedes usar Pythonsistemadpaquete para enviar la notificación:

from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)

información relacionada