Assistindo um arquivo e enviando um email quando ele muda

2

Eu tenho um arquivo de log que ocasionalmente tem erros críticos. Toda vez que um erro crítico ocorre, eu gostaria de ter um e-mail enviado para mim, notificando-me da alteração. Existe uma ferramenta / conjunto de ferramentas unix que eu possa adaptar para esse propósito?

O que eu pensei em fazer foi

tail -f logfile | grep CRITICAL > critical.errors
watch tail critical.errors   # And somehow, email on changes. 

No entanto, o comando watch não executa nenhuma ação. Então ... existe algo como 'assistir'? Ou talvez um bom script existente que faça isso? Eu posso homebrew uma solução bash / python, mas eu prefiro reutilizar as ferramentas existentes para o tratamento de erros mais limpos, etc.

    
por bsdfish 20.05.2011 / 06:39

1 resposta

4

Experimente o IWatch - é um script em Perl baseado em inotify que faz exatamente o que você precisa:

link

Você também pode rolar com as inotify-tools , especialmente inotifywait . Modificando o exemplo # 2 dessa página (não testado):

#!/bin/sh
file=logfile
cp $file $file.last
while true; do
  EVENT=$(inotifywait --format '%e' $file)
  [ $? != 0 ] && exit
  [ "$EVENT" = "MODIFY" ] && ( diff $file $file.last | mail ... ) && cp $file $file.last
done

Você também pode manter um contador de byte / linha e enviar apenas os novos bytes / linhas, mas usar diff é mais simples. Isso pode causar problemas de desempenho se o arquivo ficar grande e mudar constantemente.

    
por 20.05.2011 / 06:43

Tags