Eu tenho um problema muito estranho com systemd
. Quando eu emitir um, systemctl restart
ele iniciará o novo processo antes que o anterior termine.
Isso pode ser visto no log, onde a mensagem final de desligamento ("log de fechamento") é registrada após a mensagem de inicialização ("log de abertura").
Existe alguma maneira de adicionar um atraso entre a parada e o início do processo?
systemctl stop myservice && sleep 3 && systemctl start myservice
Respostas:
Nos arquivos de serviço do systemd, você pode definir a opção RestartSec para adicionar um atraso para a reinicialização. Veja o exemplo abaixo:
Verifique este link para mais exemplos.
fonte
RestartSec
só se aplica aos serviços configurados com aRestart=
directiva e não é levado em conta quando se faz umsystemctl restart someservice
O RestartSec parece ser usado apenas se esse serviço específico for o reiniciado por meio do comando systemctl restart.
Por exemplo, eu tenho dois serviços, A e B.
e
Se você fizer uma reinicialização do systemctl B, funcionará conforme o esperado ... mas se você fizer uma reinicialização do systemctl A, os dois serviços serão interrompidos e iniciados imediatamente novamente, sem demora.
Aparentemente, o Systemd está usando apenas os valores de configuração para o serviço especificado e os ignorando para quaisquer dependências.
Isso não é tão incomum quanto parece. Se B falar com um servidor remoto, iniciar e parar rapidamente poderá falhar devido à rejeição remota do cliente pela extremidade remota. Mas reiniciar A diretamente acontecerá sempre que A for atualizado sem uma alteração em B.
Provavelmente, você pode contornar isso adicionando o atraso a A também, mas você NÃO PRECISA fazer isso, pois quebra o isolamento do objeto, informando A sobre B quando A não é uma dependência.
fonte