Use o suporte do watchdog do systemd para reiniciar o aplicativo

Use o suporte do watchdog do systemd para reiniciar o aplicativo

Eu tenho uma systemdunidade de serviço simples para reiniciar meu pythonscript em saídas incondicionais definidas Restart=alwaysna definição de serviço. Eu só quero ter certeza absoluta de que, mesmo que o script trave de alguma forma, posso reiniciá-lo ativando a WatchdogSec=variável no arquivo da unidade.

Meu problema é odocumentos oficiais para o diário do systemdnão explica isso claramente.

Citando da mesma página,

WatchdogSec=

Configura o tempo limite do watchdog para um serviço. O watchdog é ativado quando a inicialização é concluída. O serviço deve ligar sd_notify(3)regularmente com "WATCHDOG=1"(ou seja, o "ping keep-alive").

A parte que não está clara é se oserviçoele mesmo cuida de manter os pings com o serviço watchdog (ou) o aplicativo que ele está executando (no meu caso - script Python) precisa manter o ping atualizando a variável de ambiente mencionada.

Minha definição simples de serviço

[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, a este arquivo de serviço, se eu apenas adicionar a linha abaixo, meu script será reiniciado automaticamente?

WatchdogSec=30s

Responder1

Para "dar tapinhas" ou executar ping no watchdog, você pode usar o pythonsistemapacote para enviar a notificação:

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

informação relacionada