Only email on cron errors for jobs in cron.daily, cron.hourly, etc

Solution 1:

You may want to use one of the wrappers for the programs, that output everything when something goes bad and swallow stdout otherwise.

One example might be cronic, just prepend 'cronic' to 'run-parts' e.g.:

# m h dom mon dow user  command
 17 *  *   *   *  root  cd / && /etc/cronic run-parts --report /etc/cron.hourly

where /etc/cronic is a place with executable cronic script, downloaded from the website mentioned.

Solution 2:

You should send successful email notifications to /dev/null so they disappear.

But you want to see unsuccessful email notifications.

This means you need to first direct stdout to /dev/null and then direct /dev/stderr to stdout

try changing the redirection part of your cronjobs to

>/dev/null 2>&1

See this link

Solution 3:

  • If the script is well behaved, it will write only to STDOUT if successful, and to STDERR in case there is an error.
  • By default, cron will mail everything that the script writes into STDOUT or STDERR (Arch wiki).

So, if you want to keep error notifications, don't redirect STDERR, just STDOUT:

COMMAND > /dev/null

If you do the typical >/dev/null 2>&1, you are effectively suppressing both (bash documentation).

  1. Make stdin file descriptor a copy of /dev/null.
  2. Make stderr file descriptor a copy of stdout (that already pointed to /dev/null).