Envie e-mail com base nos resultados do grep

2

Estou usando o WebInject (CLI não é GUI) para testar os serviços da Web on-line. Eu ia com uma terceira pessoa até encontrar esta pequena jóia e percebi o que eu poderia salvar ...

O que eu quero realizar é mostrar os resultados do WebInject (script Perl). Se encontrar um padrão, encaminhe os resultados para o correio. Sou novo nisso e não sei bem como escrever a lógica para avaliar os resultados e enviá-los para o correio.

Isso é o que eu tenho até agora:

$ perl webinject.pl | grep 'TEST CASE FAILED'

Eu só quero enviar um email se o grep encontrar uma correspondência, caso contrário nenhum email deve ser enviado. Eu gostaria de configurar isso com o cron para rodar em intervalos de 10 ou 15 minutos.

Como uma nota lateral, o grep pode pegar os caracteres iniciais e finais de um padrão correspondente?

UPDATE 1: descobriu as linhas iniciais e finais (-A # -B #)

Muito obrigado!

    
por JohnyD 22.06.2010 / 18:34

2 respostas

2

Dê uma olhada nesta resposta echo baseado no resultado do grep
É quase o mesmo, pegue a resposta que melhor se adapte à sua necessidade e então suprima o eco Nenhuma parte e remodele a parte do eco sim por um comando de e-mail

Registrando os caracteres iniciais e finais, você pode usar as opções -C ou -A e -B (-C é -A X -B X)

   -A NUM, --after-context=NUM
          Print NUM lines of trailing context after matching lines.  Places a line containing -- between contiguous groups of matches.


   -B NUM, --before-context=NUM
          Print NUM lines of leading context before matching lines.  Places a line containing -- between contiguous groups of matches.

   -C NUM, --context=NUM
          Print NUM lines of output context.  Places a line containing -- between contiguous groups of matches.

se eu entendi o que você quer fazer, você pode gostar do seguinte exemplo

perl webinject.pl > /tmp/webinject_result.txt
if grep --quiet 'TEST CASE FAILED' /tmp/webinject_result.txt;
then
  grep -B 20 -B 2 'TEST CASE FAILED' /tmp/webinject_result.txt | mail [email protected]
fi
    
por 22.06.2010 / 18:46
2

Aqui está um verso que deve funcionar:

perl webinject.pl | grep 'TEST CASE FAILED' 2>&1 > /tmp/grep.log && /usr/bin/mail -s "grep found something" [email protected] < /tmp/grep.log

Aqui está um caso mais genérico, com vários comandos:

{ COMMAND1 ; COMMAND2 |grep 'your string here' ; } 2>&1 > /tmp/logfile && /usr/bin/mail -s "$SUBJECT" $MAILTO < /tmp/logfile

O código após o && só será ativado se o comando dentro das chaves encontrar uma correspondência (O código de retorno é zero, o que significa sucesso). Eu uso o 2 > & 1 para garantir que não perca nenhuma saída.

Você também pode enviar essas informações para o syslog. Veja Melhor registro de cronjobs? Enviar saída do cron para o syslog?

    
por 22.06.2010 / 19:20