This post is in the same vein than the previous one but applies to cron jobs instead of celery tasks.

I used to redirect stderr to a log file for my cron jobs but it took me weeks to figure the jobs were crashing in the first place.

So now I want my jobs to crash loudly, for that purpose I use slacktee util that posts stdin to slack.

#!/bin/bash # Take a command to run in argument. Posts stderr to slack if it fails. runcheck () { ERR = " $( $@ 2>&1 > /dev/null ) " if [ $? -ne 0 ] ; then echo " \` ${ 1 ##*/ } \` failed" | /usr/local/bin/slacktee.sh -p -u " $HOSTNAME " --config /home/ubuntu/.slacktee-alert if [ ! -z $ERR ] ; then echo " ${ ERR } " | sed -e 's/^/>/' | /usr/local/bin/slacktee.sh -p -u " $HOSTNAME " --config /home/ubuntu/.slacktee-alert fi fi } main () { runcheck $@ } main $@

runcheck.sh

So my cron tasks are declared like so :

$ crontab -l SHELL=/bin/bash # 0 */2 * * * /home/ubuntu/bin/runcheck.sh /home/ubuntu/my_project/binaries/cron/run_critics.sh

In case of failure, a slack alert pops with all needed infos : hostname, command that fails and error message.