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: Rodrigo Cunha
Subject: Re: [shell-script] Enviando email com tail -f
Date: Sun, 4 Jan 2015 14:16:50 -0200

Eu criaria um arquivo secundário para incrementar os novos  registros e faria um check para novas entradas, colocando um if para novas entradas com um  send.
Depois de tudo feito um clean no arquivo.
faça uma interação com o crontab que vai facilitar a sua vida.
Abs

Em sábado, 3 de janeiro de 2015, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:
>  
>
> Em qual script Alfredo?
>
> [1] http://pastebin.com/WTRrzavw
> [2] http://pastebin.com/PeJeqwZA
> [3] http://pastebin.com/YLW1yg2J
>
> Att,
> Robson Alexandre
>
> Em 02/01/2015 18:05, "Alfredo Casanova address@hidden [shell-script]" <address@hidden> escreveu:
>>
>>  
>>
>> Acho que sobrou um "while" ali, não?
>>
>> On Fri Jan 02 2015 at 3:41:55 PM Robson Alexandre address@hidden [shell-script] <address@hidden> wrote:
>>>
>>>  
>>>
>>> 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
>>>> Pró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
>>>>
>>>
>

--
Atenciosamente,
Rodrigo da Silva Cunha



reply via email to

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