Configurando o systemd para reiniciar processos expirados

1

Temos um serviço systemd bastante complexo com Type=notify . Muito ocasionalmente, o serviço será interrompido na inicialização / reinicialização e entrará no estado failed depois que o systemd falhar ao receber uma chamada sd_notify . Gostaríamos de reiniciar o serviço nesses casos - as chances são de que a segunda vez seja iniciada corretamente.

No entanto, a systemd.service (5) página de manual diz:

When the death of the process is a result of systemd operation (e.g. service stop or restart), the service will not be restarted.

Existe uma maneira de superar essa restrição na configuração do systemd? Caso contrário, teremos que monitorar o status do daemon e reiniciá-lo manualmente toda vez que ele estiver travado, ou desenvolver algum tipo de script de supervisor para isso, o que pode introduzir mais pontos de falha no sistema.

    
por Mihai 31.07.2014 / 13:51

1 resposta

1

Não, não há possibilidade.

Esta é uma medida de segurança para evitar que o processo entre em um limbo de reinicialização no caso de um arquivo de configuração corrompido após uma intervenção manual.

Há a opção Restart =, mas para que isso funcione, o processo precisa ser acionado uma vez antes.

Portanto, o melhor caminho para você seria verificar por que seu serviço às vezes fica pendurado na inicialização ou reiniciar e resolver esse problema.

Se você não conseguir fazer isso, poderá escrever um simples shell wrapper com um loop infinito para iniciar o serviço ou, o que pode ser melhor, configurar uma instância local de um programa de monitoramento de serviço como o Monit.

    
por 31.07.2014 / 14:59

Tags