shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Enviando email com tail -f


From: Robson Alexandre
Subject: Re: [shell-script] Enviando email com tail -f
Date: Fri, 2 Jan 2015 15:41:45 -0200

Obrigado Julio pela resposta,

testei sua solução, mas ela apresentou o mesmo problema. Só matando o tail para caso o grep encontre a string enviar o email.
Então fiz da seguinte forma:

http://pastebin.com/WTRrzavw

PS: Acredito que na primeira mensagem o while após o && saiu por engano, rsrs.

Meu intuito em utilizar tail -n0 era de não armazenar buffer de n linhas e sair cuspindo tudo o que ele recebesse, e como o problema todo está no grep que fica esperando alguma sinalização de final do que é enviado para ele (acredito eu), vi que ele tem uma opção
--line-buffered, mas que no man diz ser um problema na performance do comando.
Daí o seguinte script funcionou como esperado:

http://pastebin.com/PeJeqwZA

Ou como o man recomenda não utilizar o --line-buffered, passar o grep para dentro do while que será disparado pelo tail

http://pastebin.com/YLW1yg2J

Atenciosamente
Robson Alexandre


Em 26 de dezembro de 2014 16:47, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> escreveu:
 

Fala Robson,
Qdo vc usa -n1 no tail, vc está mandando só uma linha (a última). Com -n0, vc não está mandando nenhuma. Acho que teu erro está aí.

Por outro lado, se o último registro de /var/messages não tiver a cadeia que vc pesquisa com o grep, o retorno será uma cadeia vazia que será enviada por email. Acho que essa lógica deve estar furada. Creio que vc queira algo mais ou menos assim:

while true
do
    Linha=$(tail -Fn1 /var/log/messages)
    grep "[ACESSO]" <<< "$Linha" && while
    /usr/bin/esmtp address@hidden <<< "$Linha"
done &

Não testei, mas deve ser algo mais ou menos assim.

Abcs,
Julio
@juliobash
P
róximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 09 a 13/03/15
São Paulo 4Linux 24 a 28/11/14
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 26 de dezembro de 2014 15:43, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:

 

Boa tarde a todos,

na tentativa de quando ocorrer novos registros no meu arquivo de logs, enviá-los por email fiz o simples script abaixo:

#!/bin/bash
grep "[ACESSO]" <(tail -Fn0 /var/log/messages) | while read line
do
echo $line | /usr/bin/esmtp address@hidden
done &

O que ocorre é que apenas quando o processo PID do tail é finalizado, o script completa sua execução enviando os emails.
Fiz uma outra tentativa colocando timeout no read sem sucesso.
Alguém poderia dar uma dica?

Atenciosamente
Robson Alexandre




reply via email to

[Prev in Thread] Current Thread [Next in Thread]