
Tengo una systemd
unidad de servicio simple para reiniciar mi python
script en salidas incondicionales definidas Restart=always
en 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)