Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I'm running CentOS 5.5.

We have several cronjobs stored in /etc/cron.daily/ . We would like the email for some of these cronjobs to go to a particular email address, while the rest of the emails in /etc/cron.daily/ should go to the default email address (root@localhost).

Cronjobs in /etc/cron.daily/ are run from the /etc/crontab file. /etc/crontab specifies a 'MAILTO' field. Can I override this by setting MAILTO in my /etc/cron.daily/foo cronjob?

What's the best way to handle this?

share|improve this question
    
Note for CentOS 6.5 (cronie) users: /etc/crontab does not specify defaults. –  Adam Monsen Apr 24 at 19:06

3 Answers 3

up vote 8 down vote accepted

Setting MAILTO=user@example.org in /etc/cron.daily/foo does not work. The script output is not sent to user@example.org .

The page at http://www.unixgeeks.org/security/newbie/unix/cron-1.html also suggests a simple solution:

The file /etc/cron.daily/foo now contains the following:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

This will send an email to 'stefanl@example.org' with the subject which is equal to the full path of the script (e.g. /etc/cron.daily/foo).

Here's what Unixgeeks.org says about this:

Output from cron

As I've said before, the output from cron gets mailed to the owner of the process, or the person specified in the MAILTO variable, but what if you don't want that? If you want to mail the output to someone else, you can just pipe the output to the command mail. e.g.

cmd | mail -s "Subject of mail" user

Sometimes, I only want to receive the errors from a cronjob, not the stdout, so I use this trick. The syntax may look wrong at first glance, but rest assured it works. The following cronjob will send STDOUT to /dev/null, and will then handle STDERR via the pipeline.

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

Same thing, but send to syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Also see my answer on ServerFault to Cronjob stderr to file and email

share|improve this answer

A more elegant solution would be to use /etc/cron.d directly. Instead of having your script in /etc/cron.daily, put it somewhere like /usr/local/sbin/myscript.sh and then create the file /etc/cron.d/myscript as:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

This also gives you a lot more control over when the job happens; for example only on certain weekdays etc. See the crontab(5) man for more information.

share|improve this answer

Assuming you have SA access on this machine, you can create a new user account, add the tasks to this accounts cron tasks. The mail for this user can then be forwarded using a .forward file in this accounts home folder. You may have to set up permisions for this user if the cron tasks require privilaged access.

Whether this or Stefan's answer suits best really depends on how much hassle you want in setting it up and whether you want error messages to go to the root email or to the people that normally monitor the daily output.

Good luck

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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