Cron job does NOT get the environment variables set in .bashrc

bash, cron, environment-variables

Solution

The reason for `source ~/.bashrc` not working is the contents on your `~/.bashrc` (default one from Ubuntu 12.04). If you look in it you will see on lines 5 and 6 the following:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

`PS1` variable is set for an interactive shell, so it's absent when run via `cron`, even though you are executing it as a login shell. This is confirmed by contents of the file produced by `/bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test'`:

+ source /home/plee/.bashrc
++ '[' -z '' ']'
++ return

To make `source ~/.bashrc` work, comment out the line that checks for presence of the `PS1` variable in `~/.bashrc`:

#[ -z "$PS1" ] && return

This will make `bash` execute the entire contents of `~/.bashrc` via `cron`

Problem

Here is my cron job: ``` plee@dragon:~$ crontab -l * * * * * /bin/bash -l -c 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test' ``` and inside `~/.bashrc` file, I have `export EDITOR=vim`, but in the final `/tmp/cronjob.test` file, it's still empty? So how can I get the environment variables (set in `.bashrc` file) and use it in my cron job? ``` plee@dragon:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04 LTS Release: 12.04 Codename: precise plee@dragon:~$ uname -a Linux dragon 3.2.0-26-generic-pae #41-Ubuntu SMP Thu Jun 14 16:45:14 UTC 2012 i686 i686 i386 GNU/Linux ``` If use this: ``` * * * * * /bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test' 2> /tmp/cron.debug.res ``` In `/tmp/cron.debug.res`: ``` ... ++ return 0 + source /home/plee/.bashrc ++ '[' -z '' ']' ++ return + echo ``` BTW, the `.bashrc` file is the default one came with Ubuntu 12.04, with the exception that I added one line `export EDITOR=vim`. If I don't use the cron job, instead, just directly do this on the command line: ``` source .bashrc; echo $EDITOR # Output: vim ```

Original source