crontab execution doesn't have the same environment variables as executing user
Cron always runs with a mostly empty environment. HOME
, LOGNAME
, and SHELL
are set; and a very limited PATH
. It is therefore advisable to use complete paths to executables, and export any variables you need in your script when using cron
.
There are several approaches you can use to set your environment variables in cron
, but they all amount to setting it in your script.
Approach 1:
Set each variable you need manually in your script.
Approach 2:
Source your profile:
. $HOME/.bash_profile
(or . $HOME/.profile
)
(You will usually find that the above file will source other files (e.g. ~/.bashrc
--> /etc/bashrc
--> /etc/profile.d/*
) - if not, you can source those as well.)
Approach 3:
Save your environment variables to a file (run as the desired user):
env > /path/to/my_env.sh
Then import via your cron script:
env - `cat /path/to/my_env.sh` /bin/sh
Approach 4:
In some cases, you can set global cron
variables in /etc/default/cron
. There is an element of risk to this however, as these will be set for all cron
jobs.