How to get CRON to call in the correct PATHs

2018-12-31 16:31发布

I'm trying to get cron to call in the correct PATHs. When I run a Python script from shell the script runs fine as it uses the PATHs set in bashrc but when I use cron all the PATHs are not used from bashrc. Is there a file I can enter the PATHs into for cron like bashrc or a way to call the PATHs from bashrc?

Sorry I don't think I worded this correctly, I can get the correct script to run (meaning the PATH to the script in crontab is not the problem here), it's just when that script is running I run a build and this uses the PATHs set in .bashrc. When I run the script when I'm logged in, the .bashrc PATHs are pulled in. Since cron doesn't run in a shell per say it does not pull in .bashrc. Is there a way of pulling this in without having to write a bash script wrapper?

标签: linux path cron
15条回答
心情的温度
2楼-- · 2018-12-31 17:27

The default environment for cron jobs is very sparse and may be very different from the environment you develop your python scripts in. For a script that might be run in cron, any environment that you depend on should be set explicitly. In the cron file itself, include full paths to python executables and to your python scripts.

查看更多
泛滥B
3楼-- · 2018-12-31 17:28

On my AIX cron picks up it's environmental variables from /etc/environment ignoring what is set in the .profile.

Edit: I also checked out a couple of Linux boxes of various ages and these appear to have this file as well, so this is likely not AIX specific.

I checked this using joemaller's cron suggestion and checking the output before and after editing the PATH variable in /etc/environment.

查看更多
荒废的爱情
4楼-- · 2018-12-31 17:28

If you don't want to have to make the same edits in various places, then roughly do this:

* * * * * . /home/username/.bashrc && yourcommand all of your args

The . space and then the path to .bashrc and the && command are the magic there to get your environment changes into the running bash shell. Too, if you really want the shell to be bash, it is a good idea to have a line in your crontab:

SHELL=/bin/bash

Hope it helps someone!

查看更多
登录 后发表回答