I'd like to write a simple script that alerts me if a log changes. For this I'm using grep to find the lines I'm interested in. Right now it works like this:

grep line /var/log/file | mail -s Log email@domain.tld

Problem is that this sends a mail even if no matching lines are found. The mail utility from mailutils seems to have no switch telling it to drop mails that have an empty body.

Is there a quick and easy way to do so?

link|improve this question

40% accept rate
feedback

1 Answer

output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log email@domain.tld

Or you can make this into a cron job and then if it produces any output it will email the users. You can edit the /etc/aliases file (and then run newaliases command) to send mail to address not on the box.

Ex of cron entry (You won't be able to set the subject line thogh

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

Or you can get the ifne utility - This is probably what you want

grep line /var/log/file | ifne mail -s Log email@domain.tld

The ifne command it availabe from the epel repo for centos and RHEL. I can't find a link to the man page online but there it is

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)
link|improve this answer
Note that grep will exit non-0 if it generates no output, so you could do: output=$(grep line /var/log/file) && echo "$output" | mail -s Log user@example.com – Sean Reifschneider Jan 15 at 3:16
Also, your suggested command doesn't send "$output" to the mail command. :-) – Sean Reifschneider Jan 15 at 3:16
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.