With BASH_ENV assigned in /etc/environment I noticed that it doesn't affect cron jobs.

I figured out that having SHELL=/bin/bash in a users' crontab does the trick! Yes! If I simply add (to the crontab):


... it works. I can go in as root and do a simple:

sed -i 1iSHELL=/bin/bash /var/spool/cron/*

However, I'd like to have this setting global (or the default).

Is it possible to set default cron SHELL as bash?

I've already tried the following, none of which did the trick:

  • Adding the line in /etc/crontab effects only the /etc/crontab itself not all users
  • Adding to /etc/sysconfig/crond and restart the cron
  • Adding to /etc/environment and cron restart
  • Added session required pam_env.so readenv=1 to /etc/pam.d/crond and restart cron
  • Added line to /etc/default/cron and another restart

How to set default cron SHELL as bash?


There is no way to set a global default shell for cron jobs.


An alternative is that if you are running shell scripts from crontab, then you can put this at the top of the script.

#!/bin/bash -l

This will make it act like a login shell.

  • Neat suggestion/workaround, but this would require me now to change all scripts (and I also wonder if there's any downside with the -l and if/why not to do it) . I know I can just add to all crontabs like this: sed -i 1iSHELL=/bin/bash /var/spool/cron/* as root, but I'm hoping for something more neat. – lzc Sep 11 '16 at 17:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.