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 >>>> >>> >