And yet another issue with cron.
I want to get an e-mail when something goes wrong on our servers. Especially if it’s a scheduled script that I normally don’t check that often any-more. (as you know from my previous post, some of scripts run every 10s, so even if I would check it by hand every hour, a serious backlog could already be generated). This worked very well by just creating a ‘forward’ file in the home directory of the user. ( ~/forward) which contains one e-mail address. The problem is that only the ‘from’ address will be something like hostname@domain [without any tld or something]. And our exchange server didn’t want to except e-mails coming from such a source.
After some googling and trying things I decided to give up and write my own very small script that takes care of this all.
#!/bin/bash stuff="" #put all output in one string while read data; do stuff="$stuff n $data" done #if string is not empty, send e-mail with contents if [[ -n "$stuff" ]] then datetime=$(date "+%Y-%m-%d %H:%M:%S.%N") echo -e "Date: $datetime \n Trace: $stuff" | mail -s 'MESSAGE FROM CRON' -- -f fi
This is how the mailer is called inside the crontab system:
*/10 * * * * /path/to/script 2>&1 &>/dev/null | /path/to/cronmailer
ps: if someone knows a better solution, like, how to set a ‘from’ address in cron, please tell me.. but for now this will work just fine..
[edit]
For some reason, another options just started to work. Not sure what I did wrong the first time I tried it
Anyway, you can also set the ‘MAILFROM’ value when editing the crontab.
Just add the following to the top of your crontab:
MAILFROM=your@email.tld
Thanks Patrick for letting it me try again. But this option is only available on newer machines. (I can’t find it on rhel 5/6)