Tentei restringir o número de reinicialização de um serviço (em um contêiner). A versão do SO é centos-release-7-5, o arquivo de serviço é praticamente como abaixo (removidos alguns parâmetros para conveniência de leitura). Deve ser bastante simples, como alguns outros posts apontaram (Post of Server Fault restart limit 1 , Post of Stack Overflow restart limit 2 ). No entanto, StartLimitBurst e StartLimitIntervalSec nunca funcionam para mim.
Testei de várias maneiras: (1) verifico o PID do serviço, mato o serviço com "kill -9 ****" várias vezes. O serviço sempre é reiniciado após 20s! (2) Eu também tentei bagunçar o arquivo de serviço, fazer o container nunca rodar. Ainda assim, não funciona, o arquivo de serviço continua reiniciando.
Qualquer 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
StartLimitIntervalSec=
foi adicionado como parte do systemd v230. No systemd v229 e abaixo, você só pode usar arquivosStartLimitInterval=
. Você também precisará colocarStartLimitInterval=
eStartLimitBurst=
na[Service]
seção - não na[Unit]
seção.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
[Service]
seção continuarão funcionando.Fonte: https://lists.freedesktop.org/archives/systemd-devel/2017-July/039255.html
Você pode ter esse problema sem ver nenhum 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 systemd recente:
Acho que encontrei o problema. Todo o documento online sugere que todos os parâmetros estão no arquivo UNIT ( systemd unit file ), mas ainda no meu sistema (centos 7.5), eles estão no arquivo de serviço. Além do nome é "StartLimitInterval", não "StartLimitIntervalSec".