如何在Python虚拟环境中运行cronjob?

11

通常我会SSH到我的EC2实例并运行:

source MYVENV/bin/activate

如何设置我的cronjob以激活虚拟环境?我的Django脚本需要存储在~/.bash_profile中的环境变量。

我尝试按照此处的步骤,但没有成功:

Cron and virtualenv

SHELL=/bin/bash
*/1 * * * * root source /home/ec2-user/MYVENV/activate && python /home/script.py

这是我的当前设置。

在日志中我得到了以下错误:

/bin/bash: root: 命令未找到


在您的情况下,~/.bash_profile 中有一些不寻常的内容,因此在运行脚本之前,请先将其源化。 - phd
https://stackoverflow.com/search?q=%5Bcron%5D+%5Bvirtualenv%5D+variables - phd
3个回答

17

创建一个名为scripts.sh的shell脚本。

#!/bin/bash
source /home/user/MYVENV/bin/activate
python /path/to/file/script.py

然后在cron中放置

*/1 * * * * bash /path/to/shell/script/scripts.sh

这个脚本将加载您所有的环境变量,并从您的 Python 环境中执行


7

您可以直接从您的环境中运行Python解释器,例如:

MYENV/bin/python script.py

要找到你环境下的Python解释器目录,需要进入虚拟环境并运行以下命令:

which python

在您的情况下,这应该变成

*/1 * * * * /home/ec2-user/MYVENV/python /home/script.py

这个问题是它没有激活我的环境变量。 - superdee
在这种情况下,您需要将Python环境的路径添加到路径中,即导出PATH=/home/ec2-user/MYVENV:$PATH。 - Nic Wanavit

2
你可以创建一个包装bash脚本来执行你的Django脚本。请参见下面的示例。"最初的回答"。
#!/bin/bash -l       // this should pick up your ~/.bash_profile environment variables

cd /path to project dir/   // set it up if your project is not in python path

source /Users/<user>/.virtualenvs/dslab/bin/activate // this activates your environment 

python /home/script.py   // run your script

我需要把这个放到一个bash脚本里面,然后运行它吗? - superdee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接