StartLimitIntervalSec e StartLimitBurst do Systemd nunca funcionam

4

Eu tentei restringir o número de um serviço (em um contêiner) reiniciar. A versão do sistema operacional é centos-release-7-5, o arquivo de serviço é praticamente como abaixo (removido alguns parâmetros para a conveniência de leitura). Deve ser bastante simples, como alguns outros posts apontaram (Post of Fault reinicialização limite 1, Post of Stack Overflow limite de reinicialização 2). No entanto, StartLimitBurst e StartLimitIntervalSec nunca funcionam para mim.

Eu testei de várias maneiras: (1) eu checo o serviço PID, mato o serviço com "kill -9 ****" várias vezes. O serviço sempre é reiniciado depois dos 20 anos! (2) Eu também tentei bagunçar o arquivo de serviço, fazer o contêiner nunca rodar. Ainda assim, não funciona, o arquivo de serviço continua reiniciando.

Alguma ideia?

[Unit]
Description=Hello Fluentd
After=docker.service
Requires=docker.service
StartLimitBurst=2
StartLimitIntervalSec=150s

[Service]
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker stop "fluentd"
ExecStartPre=-/usr/bin/docker rm -f "fluentd"
ExecStart=/usr/bin/docker run fluentd
ExecStop=/usr/bin/docker stop "fluentd"
Restart=always
RestartSec=20s
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
    
por batilei 21.08.2018 / 18:40

2 respostas

5

StartLimitIntervalSec= foi adicionado como parte do systemd v230. No systemd v229 e abaixo, você só pode usar StartLimitInterval= . Você também precisará colocar StartLimitInterval= e StartLimitBurst= na seção [Service] - não na seção [Unit] .

Para verificar sua versão do systemd no CentOS, execute rpm -q systemd .

Se você atualizar para o systemd v230 ou superior, os nomes antigos na seção [Service] continuarão funcionando.

Fonte: link

Você pode ter este problema sem ver qualquer erro, porque o systemd ignora diretivas desconhecidas. O systemd assume que muitas diretivas mais recentes podem ser ignoradas e ainda permitir que o serviço seja executado.

É possível verificar manualmente um arquivo de unidade para diretivas desconhecidas. Pelo menos parece funcionar no recente systemd:

$ systemd-analyze verify foo.service
/etc/systemd/system/foo.service:9: Unknown lvalue 'FancyNewOption' in section 'Service'
    
por 22.08.2018 / 12:06
2

Acho que encontrei o problema. Todo o documento on-line sugere que todos os parâmetros estão no arquivo UNIT ( arquivo de unidade systemd ) , mas ainda no meu sistema (centos 7.5), eles estão no arquivo de serviço. Além do nome é "StartLimitInterval", não "StartLimitIntervalSec".

    
por 21.08.2018 / 20:19

Tags