Capture uma string específica e envie uma notificação toda vez

0

Este é um script no bash. Aqui

Que captura uma string "ERRO: sua conexão TCP está inativa." de um arquivo de log dinâmico ao vivo. Aqui o nome de um arquivo de log "TcpRcpt.log" que contêm amostras de dados de log abaixo.

SAT Mar 26 19:55:37  2016 TCPRcpt-0297--ERROR: your TCP- connection is dead.
SAT Mar 26 19:55:37  2016 TCPRcpt-0297--RUNNING
SAT Mar 26 19:55:37  2016 TCPRcpt-0297--RUNNING
SAT Mar 26 19:55:37  2016 TCPRcpt-0298--ERROR: your TCP- connection is dead.

Agora, emita o passo logtail TcpRcpt.log | grep -m 1 "ERROR: your TCP- connection is dead." | sed 's/.*TCPRcpt-/ PID /;s/ -//' >> LOGFILE.LOG

Ele sempre dá valor 0, mesmo que não capture a string. O que faz se condição para enviar notificação toda vez, quando loop executar.

Agora, minha pergunta: existe alguma outra alternativa? que notificam via email quando capturar a string toda vez?

    
por Bipul kumar 27.03.2016 / 19:14

1 resposta

1

'Sempre dá 0 valor' porque é o código de saída do último comando no pipeline - sed, que é bem-sucedido (retorna 0) mesmo quando nenhuma substituição acontece.

Definindo pipefail opção fará com que o resultado do pipe definido para o resultado do primeiro comando com falha no pipeline, se houver. Modifique seu script configurando essa opção antes de chamar o logtail:

    ...
    set -o pipefail
    logtail TcpRcpt.log | grep -m 1 "ERROR: your TCP- connection is dead." | sed 's/.*TCPRcpt-/ PID /;s/ -//' >> LOGFILE.LOG
    ...
    
por 27.03.2016 / 20:37