Enviando e-mail da linha de comando se o corpo não estiver vazio

11

Gostaria de escrever um script simples que me avise caso um log seja alterado. Para isso, estou usando o grep para encontrar as linhas nas quais estou interessado. Agora funciona assim:

grep line /var/log/file | mail -s Log [email protected]

O problema é que isso envia um email mesmo que nenhuma linha correspondente seja encontrada. O utilitário de correio do mailutils parece não ter nenhum comutador dizendo a ele para deixar e-mails com um corpo vazio.

Existe uma maneira rápida e fácil de fazer isso?

    
por cdecker 15.01.2012 / 01:39

3 respostas

10
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log [email protected]

Ou você pode transformar isso em um cron job e, se ele produzir alguma saída, ele enviará um email para os usuários. Você pode editar o arquivo / etc / aliases (e depois executar o comando newaliases) para enviar e-mail para o endereço, não na caixa.

Ex da entrada do cron (você não poderá definir a linha de assunto com

1 0 * * *  grep line /var/log/file

Ou você pode pegar o utilitário ifne - provavelmente é o que você quer

linha grep / var / log / file | ifne mail -s Log [email protected]

O comando ifne está disponível no epo repo para centos e RHEL. Não consigo encontrar um link para a página de manual on-line, mas lá está

ifne(1)
ifne(1)

NAME ifne - Run command if the standard input is not empty

SYNOPSIS ifne [-n] command

DESCRIPTION ifne runs the following command if and only if the standard input is not empty.

OPTIONS -n Reverse operation. Run the command if the standard input is emp- ty.

          Note  that  if  the  standard  input  is not empty, it is passed
          through ifne in this case.

EXAMPLE find . -name core | ifne mail -s "Core files found" root

AUTHOR Copyright 2008 by Javier Merino

   Licensed under the GNU GPL

                              2008-05-01                           ifne(1)
    
por 15.01.2012 / 02:05
13

"man mail" diz-me que o argumento -E interrompe o envio de mensagens se o corpo estiver vazio. funciona bem para mim.

-E

If an outgoing message does not contain any text in its first or only message part, do not send it but discard it silently, effectively setting the skipemptybody variable at program startup. This is useful for sending messages from scripts started by cron(8).

    
por 11.07.2012 / 10:55
0

Veja link

Use ifne :

grep line /var/log/file | ifne mail -s Log [email protected]
    
por 31.05.2018 / 14:28