Debugging the cronjobs

Published: by

  • Categories:

Cronjobs are famous to run successfully from shell but failing to run as a cronjob. Well from my experience and looking at the issues at stackoverflow.com and superuser.com, I can say that there are mainly two issues:

  • cronjob have their own environment variables. for ex. they dont have PATH variables.
  • Other issues happen when you try to run a GUI app in a cronjob to give a high priority alert to a user.

So, basically you should always run a binary by giving its full path else its very likely that it will fail. You should also will have to the display when running a GUI app. For ex, to run a kdialog:

DISPLAY:0 /usr/bin/kdialog -title "Test" --msgbox "Test message" 

Well, that was just general guidelines. So, debug a cronjob, you can modify the cronjob code like:

#!/bin/bash
{
.
. 
#your actual code goes here
.
.
} >> /tmp/cronthatfailed.out 2>&1

That will actually redirect all the output to a file (/tmp/cronthatfailed.out) so that you can debug as to what happened. "2>&1" tells STDERR to redirect to STDOUT. Well, for information, in unix, 2 represents STDERR, 1 represents STDOUT and 0 represents STDIN.

So, that it. Next time your cronjob fail, just follow the above method. That always work for me.