Run script in a non interactive shell?
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 cron, which might help solve your problem.
From @sr_'s link (How to get a clean environment in a ksh shell?), I looked up env, and you might want to try this:
env -i ./my-script.sh