The main differences between running a command from cron and running on the command line are:
- cron is probably using a different shell (generally
/bin/sh); - cron is definitely running in a small environment (which ones depends on the cron implementation, so check the
cron(8)orcrontab(5)man page; generally there's justHOME, perhapsSHELL, perhapsLOGNAME, perhapsUSER, and a smallPATH); - cron treats the
%character specially (it is turned into a newline); - cron jobs run without a terminal or graphical environment.
The following invocation will run the shell snippet pretty much as if it was invoked from cron. I assume the snippet doesn't contain the characters ' or %.
env - HOME="$HOME" USER="$USER" PATH=/usr/bin:/bin /bin/sh -c 'shell snippet' </dev/null >job.log 2>&1
See also executing a sh script from the cronexecuting a sh script from the cron, which might help solve your problem.