Use o suporte do watchdog do systemd para reiniciar o aplicativo

1

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
    
por Inian 29.11.2017 / 15:45

1 resposta

2

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)
    
por 29.11.2017 / 16:31