Quero executar um script bash a cada N segundos, onde, mesmo que falhe, quero que while
o loop continue sem travar.
Estou usando a seguinte solução: Como executar repetidamente o script bash a cada N segundos? :
enquanto roteiro; durma 10; feito
Foi comentado que: This is the canonical way to repeat a command as long as it doesn't fail.
. Se meu script falhar, observo que o loop while foi encerrado.
Existe alguma maneira de aplicar try...catch
o mecanismo no script e continuar o while
loop mesmo se o script falhar?
Você pode tentar trocar a condição e a ação no
while
loop e executarscript
em segundo plano:Isso faz com que o mecanismo de loop não se importe se
script
terá sucesso ou falha.Isso também será um pouco mais fácil de encerrar do que o seu exemplo. Basta identificar e encerrar o
sleep
processo. Isso fará comsleep
que um código de erro seja retornado, o que por sua vez encerrará owhile
loop.Também pode manter seu script rodando mais próximo do intervalo exato solicitado. Seu exemplo original seria executado
script
a cadaN+X
segundo, ondeN
é 10, eX
leva o tempo quescript
leva para ser executado. Este exemplo deve estar muito mais próximo de cadaN
segundo.Você deve esperar e se preparar para o caso em que
script
levará mais deN
alguns segundos para ser concluído e, portanto, poderá ter várias instâncias em execução simultaneamente.Uma maneira comum de escrever um
while
loop infinito no shell POSIX é usar otrue
comando como condição: