Como estamos desenvolvendo um conjunto complexo de serviços no Linux, desenvolvemos uma ferramenta que os inicia um a um. Uma das muitas considerações para a criação de tal ferramenta foi a ordem na qual os itens podem ser iniciados, mas também uma forma de garantir que, na morte de um daemon, o daemon reinicie automaticamente. Há também parâmetros amplos do servidor que são compartilhados entre todos os serviços.
No entanto, tenho um problema agora em que desligar esse sistema leva tempo. Pode levar até 10 segundos para desligar tudo.
O que estou querendo saber é: quanto tempo um script definido em /etc/init.d/...
pode levar para desligar os daemons que está controlando?
Embora eu imagine que, se decompuséssemos todos esses daemons em pacotes separados (já que os scripts de inicialização agora podem incluir uma lista de dependências...), encontraríamos exatamente o mesmo problema. Então, neste ponto, preferimos manter as coisas do jeito que estão...
Existe uma quantidade de tempo bem definida/conhecida que um desligamento deve levar no máximo para ser compatível com todos os daemons?
Não.
Como agora testei o desligamento de vários daemons em um sistema rodando com systemd, posso atestar que o tempo limite está claramente definido para cada daemon.
Pelo que posso dizer, também se aplica a daemons que ainda são iniciados/interrompidos com um script SysV. Quando o Cassandra ainda estiver trabalhando em seus arquivos, fazer um
systemctl restart cassandra
não funcionará como esperado. Para esses serviços, você provavelmente deseja fazer umsystemctl stop cassandra
e, quando tiver certeza de que foi interrompido, façasystemctl start cassandra
.Então... Você pode definir/alterar o
TimeoutStopSec
parâmetro por daemon. Isso permite grande granularidade!E você pode alterar o padrão do sistema:
DefaultTimeoutStartSec
(o que provavelmente não é aconselhável...)Há outro tempo importante, que é o recurso de reinicialização (mostrado no último link). É muito importante porque o systemd quer reiniciar um processo em 100ms por padrão!!! Então se o seu daemon demorar até 2 minutos para desligar, não vai funcionar direito...
Para os interessados, para Cassandra, primeiro executo um script que interrompe Cassandra . Então eu prossigo com o desligamento.
Isso pode levar quanto tempo Cassandra precisa (pode ser bastante longo), mas irá parar Cassandra de forma limpa. Observe que pode parecer demorado desligar dessa maneira, mas, ao reiniciar, o Cassandra estará pronto quase instantaneamente.
Em comparação, desligar muito rápido significa matar Cassandra e, ao reiniciar, ele precisa voltar aos diários, o que na verdade é muito mais longo. Então é uma boa troca.