Quero que o Upstart faça duas coisas:
- pare de tentar reaparecer um processo com falha tão rápido
- nunca desista de tentar reaparecer
Em um mundo ideal, o iniciante tentaria reiniciar um processo morto após 1s e depois duplicaria esse atraso em cada tentativa, até atingir uma hora.
É algo assim possível?
never give up trying to respawn
permanece sem resposta. alguém?Respostas:
O Upstart Cookbook recomenda um atraso pós-parada ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Use a
respawn
estrofe sem argumentos e ela continuará tentando para sempre:(Eu peguei isso nesta pergunta do Ubuntu )
Para adicionar a parte do atraso exponencial, eu tentaria trabalhar com uma variável de ambiente no script pós-parada, acho algo como:
** EDIT **
Para aplicar o atraso apenas ao reaparecer, evitando o atraso em uma parada real, use o seguinte, que verifica se o objetivo atual é "parar" ou não:
fonte
post-start
para redefini-la para 1.Como já mencionado, use
respawn
para acionar o reaparecimento.No entanto, a cobertura
respawn-limit
do Upstart Cookbook diz que você precisará especificarrespawn limit unlimited
para ter um comportamento de repetição contínua.Por padrão, ele tentará novamente enquanto o processo não reaparecer mais de 10 vezes em 5 segundos.
Eu sugeriria, portanto:
fonte
Acabei colocando um
start
em um cronjob. Se o serviço estiver em execução, não terá efeito. Se não estiver em execução, inicia o serviço.fonte
Fiz uma melhoria na resposta de Roger. Normalmente, você deseja se retirar quando houver um problema no software subjacente, causando uma falha muito em um curto período de tempo, mas depois que o sistema se recuperar, você deseja redefinir o tempo de retirada. Na versão de Roger, o serviço dorme por 60 segundos sempre, mesmo para falhas isoladas e isoladas após 7 falhas.
fonte
Você deseja
respawn limit <times> <period>
- embora isso não forneça o comportamento exponencial que você está procurando, provavelmente o faria na maioria dos casos de uso. Você pode tentar usar valores muito grandes paratimes
eperiod
aproximar o que você tenta alcançar. Veja a seção do man 5 initrespawn limit
para referência.fonte
respawn limit 10 3600
as 10 tentativas, provavelmente seria esgotado imediatamente - já que, por padrão, não há atraso.Outros responderam à pergunta para estrofes de respawn e limite de respawn, mas eu gostaria de adicionar minha própria solução para o script pós-parada que controla o atraso entre reiniciar.
O maior problema com a solução proposta por Roger Dueck é que o atraso faz com que o 'restart jobName' seja interrompido até que o sono seja concluído.
Minha adição verifica se há uma reinicialização em andamento antes de determinar se deve ou não dormir.
fonte