Monitorar log ao vivo para erro. Se error = re-executar o comando e reiniciar o monitoramento de log, se não for encontrado = mantenha o monitoramento para sempre

0

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
    
por NewsGuy 25.05.2016 / 20:59

2 respostas

0

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
    
por 25.05.2016 / 21:33
0

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.

    
por 25.05.2016 / 23:20