Para "pat" ou ping no watchdog, você pode usar o pacote systemd do python para enviar a notificação:
from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)
Eu tenho uma unidade simples de serviço systemd
para reiniciar meu script python
em saídas incondicionais definidas como Restart=always
na definição de serviço. Eu só quero ter certeza de que, mesmo que o script seja interrompido de alguma forma, eu posso reiniciá-lo ativando a variável WatchdogSec=
no arquivo de unidade.
Meu problema é que os documentos oficiais do diário do systemd não explicam isso claramente.
Citando a mesma página,
WatchdogSec=
Configures the watchdog timeout for a service. The watchdog is activated when the start-up is completed. The service must call
sd_notify(3)
regularly with"WATCHDOG=1"
(i.e. the "keep-alive ping").
A parte que não é clara é se o próprio serviço cuidará de manter os pings com o serviço watchdog (ou) o aplicativo que está executando (no meu caso - script Python) precisa manter o ping atualizando a variável de ambiente mencionada.
Minha definição de serviço simples
[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
Então, para este arquivo de serviço, se eu adicionar a linha abaixo, ele reiniciará meu script automaticamente?
WatchdogSec=30s
Para "pat" ou ping no watchdog, você pode usar o pacote systemd do python para enviar a notificação:
from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)