reinicialização automática do serviço systemd após StartLimitInterval

19

Eu quero que meu serviço systemd seja reiniciado automaticamente em caso de falha. Além disso, quero classificar o limite das reinicializações. Eu quero permitir o máximo de 3 reinicializações dentro de 90 segundos de duração. Por isso, fiz a seguinte configuração.

[Serviço]
Reiniciar = sempre
StartLimitInterval = 90
StartLimitBurst = 3

Agora o serviço é reiniciado em caso de falha. Depois de 3 falhas rápidas / reinicia não está reiniciando mais como esperado. Agora eu esperava que o systemd iniciasse o serviço após o tempo limite (StartLimitInterval). Mas o systemd não está iniciando automaticamente o serviço após o tempo limite (90sec), se eu reiniciar manualmente o serviço após o tempo limite que está funcionando. Mas eu quero que o systemd inicie automaticamente o serviço após o StartLimitInterval. Por favor, deixe-me saber como conseguir esse recurso.

    
por Dinesh P.R. 16.11.2015 / 07:15

3 respostas

15

Para que um serviço seja reiniciado 3 vezes em intervalos de 90 segundos, inclua as seguintes linhas no seu arquivo de serviço systemd:

Restart=always
RestartSec=90
StartLimitInterval=400
StartLimitBurst=3

Isso funcionou para mim para um serviço que executa um script usando 'Type = idle'. Observe que 'StartLimitInterval' deve ser maior que 'RestartSec * StartLimitBurst', caso contrário, o serviço será reiniciado indefinidamente.

Demorei algum tempo com muitas tentativas e erros para descobrir como o systemd usa essas opções, o que sugere que o systemd não é tão bem documentado quanto se espera. Essas opções fornecem o tempo de ciclo de repetição e o máximo de tentativas que eu estava procurando.

    
por 02.09.2016 / 06:41
9

O comportamento que você descreve é consistente com a documentação:

StartLimitInterval =, StartLimitBurst = Configure a limitação da taxa inicial de serviço. Por padrão, os serviços que são iniciados mais de 5 vezes em 10 segundos não podem ser iniciados mais vezes até que o intervalo de 10 segundos termine. Com essas duas opções, essa limitação de taxa pode ser modificada. Use StartLimitInterval = para configurar o intervalo de verificação (o padrão é DefaultStartLimitInterval = no arquivo de configuração do gerenciador, definido como 0 para desabilitar qualquer tipo de limitação de taxa). Use StartLimitBurst = para configurar quantas partidas por intervalo são permitidas (o padrão é DefaultStartLimitBurst = no arquivo de configuração do gerenciador). Essas opções de configuração são particularmente úteis em conjunto com Restart =; no entanto, eles se aplicam a todos os tipos de partidas (incluindo manual), não apenas àquelas acionadas pela lógica Restart =. Observe que as unidades configuradas para Reiniciar = e que atingem o limite inicial não são mais tentadas a serem reiniciadas; no entanto, eles ainda podem ser reiniciados manualmente em um ponto posterior, a partir do qual a lógica de reinicialização é novamente ativada. Observe que systemctl reset-failed fará com que o contador de taxa de reinicialização de um serviço seja liberado, o que é útil se o administrador quiser iniciar manualmente um serviço e o limite de início interferir com isso.

Eu ainda estou tentando descobrir uma maneira de realizar o comportamento que você deseja.

    
por 02.02.2016 / 13:16

Tags