
Eu tenho uma systemd
unidade de serviço simples para reiniciar meu python
script em saídas incondicionais definidas Restart=always
na 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)