systemd limite de reinicialização

3

Relacionado: Limite de reinicialização do sistema

Estou trabalhando em um produto comercial que executa um serviço de câmera. Este serviço é crítico para a funcionalidade normal do sistema. Até agora, está indo bem e eu sou capaz de reiniciar o serviço se ele falhar devido a problemas de protocolo / driver de baixo nível. Aqui está um trecho do arquivo da unidade .service que lida com a lógica de reinicialização e reinicialização do serviço.

...
[service]
Restart=on-failure
StartLimitInterval=2min
StartLimitBurst=5
StartLimitAction=reboot-force
...

Sob certas condições (por exemplo: falhas de barramento), é bem possível que qualquer número de reinicializações não ajude a recuperar o sistema. Nesta situação, queremos parar de reinicializar o dispositivo (pois pode ser chato para o usuário) e parar todas as tentativas de recuperar os pipelines da câmera. Isso pode ser obtido usando um serviço de monitoramento que monitora o número de reinicializações pelo qual o dispositivo passou, antes de interromper outras reinicializações.

A outra opção, pensei, é depender do systemd, em vez de adicionar outro serviço de monitoramento apenas para esse propósito (que por sua vez seria monitorado pelo systemd). Passei algum tempo procurando as opções do systemd, lendo as documentações / exemplos para ver se tais limites de reinicialização existem. Eu estou procurando uma maneira de restringir o número de reinicializações para alguns StartLimitReboot configurável

tl; dr

Eu quero alcançar algo assim

...
[service]
... 
...
... 
StartLimitReboot=3 # stop rebooting after this limit
...

Parece que o systemd não suporta tal semântica a partir de agora, mas se ele suportar, isso simplificaria substancialmente a minha tarefa.

    
por Arun 30.04.2018 / 04:55

1 resposta

0

Não, systemd não oferece um recurso para gerenciar várias reinicializações e, em seguida, parar de reinicializar.

Considere um caso em que seu aplicativo falha duas vezes e dispara duas reinicializações por meio de StartActionLimit e permanece estável por duas semanas, depois aciona uma terceira reinicialização muito mais tarde. Você esperaria que o teórico StartLimitReboot=3 fosse acionado nesse caso?

Se não, tem que haver algum valor de tempo limite para expirar o "contador de reinicialização". Isso é diferente do timer de quão rápido um serviço é reinicializado, porque o cronômetro de reinicialização teria que levar em consideração quanto tempo leva para a máquina inicializar antes mesmo de tentar iniciar o serviço novamente.

Além disso, se um sistema estiver preso em loop de inicialização devido a uma falha crítica no serviço, será que faz sentido manter a máquina se o serviço crítico não estiver funcionando ou e depois disso?

Embora eu possa ver o interesse em ter systemd ajuda aqui, não espero que esse recurso apareça em breve.

    
por 30.04.2018 / 19:00