Como o systemd decide se um serviço é ok ou não?

3

Esta questão está relacionada com: serviço systemd confiável para autossh

Eu tenho um serviço que usa type = simple. Aqui o systemd docs:

Type=simple (default): systemd considers the service to be started up immediately. The process must not fork. Do not use this type if other services need to be ordered on this service, unless it is socket activated.

Imagine que o serviço está em um loop infinito ou trava.

Como pode saber se o serviço está correto ou não?

Existe algum tipo de IPC entre o systemd e o serviço possível?

O que eu quero: quero que systemctl status foo-service me diga se o serviço está ok. Isso é diferente de "o processo linux do serviço ainda existe".

    
por guettli 15.04.2016 / 07:12

1 resposta

2

systemctl status não fornece informações avançadas sobre o serviço em execução.

Se você estiver procurando maneiras de notificar o systemd sobre alterações de status em seu serviço, sd_notify pode ser útil. Isso depende da capacidade de seus serviços para o autodiagnóstico. Se o seu serviço usa sd_notify, you can configure the service with WatchdogSec '. Para citar da documentação :

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"). If the time between two such calls is larger than the configured time, then the service is placed in a failed state and it will be terminated with SIGABRT.

No entanto, usando systemctl show , você pode recuperar algumas informações adicionais legíveis por máquina no serviço, o que pode ajudá-lo a decidir se o serviço está correto.

Caso você esteja procurando por systemd para saber se seu serviço é executado em um loop infinito, provavelmente você está sem sorte. Esse problema está intimamente relacionado com o problema de parada , para o qual está provado que não existe um algoritmo geral para resolver o problema. Embora seu problema específico possa ser solucionado, é provável que pelo menos um enorme desperdício de recursos. Consulte esta questão relacionada .

    
por 15.04.2016 / 13:59