Seu comando 'If' está verificando se literalmente as palavras "Error text" são o logfile? Não é totalmente certo que a tentativa lá embora ... eu usaria regex:
if grep -x 'ErrorText' "$File"; then
KILL error_prone_process
GOTO START
fi
Um processo em um script bash que estou desenvolvendo frequentemente falha silenciosamente (ele continua sendo executado sem código de erro, mas grava o erro em seu arquivo de log).
Assim que o erro aparecer no arquivo de log, quero que o processo seja reiniciado (e o monitoramento do arquivo de log também tenha continuado). Quando o processo terminar, quero que o resto do script seja executado.
Pesquisei bastante e tentei muitas coisas com grep e tail, e se, enquanto, pipes, etc., mas simplesmente não consigo trabalhar.
Qual é o caminho correto?
Aqui está basicamente o que eu quero, em uma linguagem imaginária (não bash / shell):
:START
RUN error_prone_process
IF "Error text" ~/logfile.txt
KILL error_prone_process
GOTO START
Seu comando 'If' está verificando se literalmente as palavras "Error text" são o logfile? Não é totalmente certo que a tentativa lá embora ... eu usaria regex:
if grep -x 'ErrorText' "$File"; then
KILL error_prone_process
GOTO START
fi
Se você tiver acesso à configuração do sistema, considere usar monit . Para monitorar os logs, monit executei um script que irá verificar o log e escrever OK ou ERRO em outro arquivo. Em seguida, verifico esse arquivo quanto ao tamanho e ao frescor do arquivo.