Limitar a taxa de reinicialização manual do serviço systemd

Limitar a taxa de reinicialização manual do serviço systemd

Eu tenho um sistema onde um serviço (nginx, por exemplo) às vezes é reiniciado excessivamente por 'systemd restart nginx' (como resultado de outros scripts, por exemplo, para aplicar uma nova configuração ou girar logs).

Mesmo ao reiniciar um serviço “manualmente” dessa forma, o systemd falha com o limite de taxa de reinicialização. Além disso, não é útil reiniciar o nginx 10 vezes em um determinado segundo, é claro.

Então, como limitar a taxa de reinicialização manual dos serviços? Existe algo como um resfriamento de reinicialização que também se aplicaria a solicitações de reinicialização manual? Todas as configurações usuais se aplicam à reinicialização automática pelo systemd, ao que parece.

Responder1

Você pode conseguir isso com StartLimitIntervalSece StartLimitBurst.

Na página de manual da unidade systemd:

StartLimitIntervalSec=intervalo, StartLimitBurst=burst

Configure a limitação da taxa inicial da unidade. As unidades que são iniciadas mais do que os tempos de rajada dentro de um intervalo de tempo não podem mais ser iniciadas. Utilize StartLimitIntervalSec= para configurar o intervalo de verificação e StartLimitBurst= para configurar quantas partidas por intervalo são permitidas.

intervalo é um intervalo de tempo com a unidade padrão de segundos, mas outras unidades podem ser especificadas, consulte systemd.time(5). O padrão é DefaultStartLimitIntervalSec= no arquivo de configuração do gerenciador e pode ser definido como 0 para desabilitar qualquer tipo de limitação de taxa. burst é um número e o padrão é DefaultStartLimitBurst= no arquivo de configuração do gerenciador.

Essas opções de configuração são particularmente úteis em conjunto com a configuração de serviço Restart= (consulte systemd.service(5)); no entanto, elas se aplicam a todos os tipos de partidas (inclusive manuais), não apenas àquelas acionadas pela lógica Restart=.

Observe que as unidades que estão configuradas para Restart= e que atingem o limite de partida não são mais tentadas a serem reiniciadas; no entanto, eles ainda podem ser reiniciados manualmente ou a partir de um temporizador ou soquete posteriormente, após o intervalo ter passado. A partir daí, a lógica de reinicialização é ativada novamente. systemctl reset-failed fará com que o contador da taxa de reinicialização de um serviço seja liberado, o que é útil se o administrador quiser iniciar manualmente uma unidade e o limite de inicialização interferir nisso. A limitação de taxa é aplicada após a execução de qualquer verificação de condição de unidade e, portanto, as ativações de unidade com condições de falha não contam para o limite de taxa.

Responder2

Qual versão do sistema operacional você está usando? O pacote nginx foi instalado usando o repositório da distribuição Linux ou a partir do código-fonte?

Talvez as respostas a essas perguntas possam ajudar a determinar o possível caminho necessário para corrigir o problema.

informação relacionada