How to get cron job to mail output only if non-empty

Matthew Flaschen matthew.flaschen at gatech.edu
Thu Mar 5 01:46:56 UTC 2009


David Karr wrote:
> I have a (root) cron job definition like the following:
> 
> 0 0 * * * /usr/bin/clamscan --no-summary -r --reload
> --log=/var/log/clamav/clamscan.log -i / | mail -s "Virus scan found
> something" davidmichaelkarr at gmail.com
> 
> This works fine when it finds something (I tested it with a fake virus
> file), but what I didn't expect is that "mail" sends the mail even if the
> output is empty.

You're trying to reinvent the wheel.  Read man cron:

"When  executing  commands, any output is mailed to the owner of the
crontab (or to the user named in the MAILTO environment variable in the
crontab, if such exists)."

Drop the mail -s "Virus scan found something" davidmichaelkarr at gmail.com
and use MAILTO instead.  cron will only send emails there when there is
actual output.

See also http://usertools.plus.net/tutorials/id/1

Matt Flaschen




More information about the ubuntu-users mailing list