Monitore um arquivo de log e execute comandos diferentes, dependendo das diferentes condições

0

Eu tenho um arquivo de log que eu quero monitorar e, dependendo de qual condição for atendida, diferentes comandos devem ser executados.

Encontrei uma solução que se aproxima deste aqui . Infelizmente isso não funciona para mim e apenas me dá linhas em branco no terminal.

xterm -e "$path_to_program | tee -a ${log_path}" & tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo "VPN is running."") } /[HOST_NOT_FOUND]/ { system("echo "error"") }

Existem outras soluções que poderiam me ajudar com o meu problema?

    
por tigger92 19.08.2015 / 16:32

2 respostas

1

Você não está escapando caracteres corretamente no código de exemplo acima: você precisa de algo mais como:

tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo \"VPN is running.\"") } /\[HOST_NOT_FOUND\]/ { system("echo \"error\"")}'

Você também pode querer investigar o uso do logrotate. Se você usar a regra postrotate , poderá ter um processador de logs agindo para você em um log que não cresça infinitamente e / ou preencha o espaço de armazenamento.

    
por 19.08.2015 / 16:56
1

A solução antes funciona, mas apenas com problemas, conforme percebi. Por alguma razão, o awk apenas lê o arquivo de registro a cada 2 minutos e depois envia um "erro" ao terminal porque nesse momento o HOST_NOT_FOUND apareceu várias vezes no log do curso. Eu encontrei uma solução muito melhor baseada em este tópico. Apenas tenha em mente que as caudas devem ser fechadas separadamente.

tail -f ${log_path} | while read LOGLINE
do 
     [[ "${LOGLINE}" == *"Initialization Sequence Completed"*]] && echo "VPN is running"
     [[ "${LOGLINE}" == *HOST_NOT_FOUND"* ]] && echo "VPN failed."
done
    
por 19.08.2015 / 19:31