【问题标题】:How do I run a cronjob with a python virtual environment?如何使用 python 虚拟环境运行 cronjob?
【发布时间】:2019-09-15 12:35:23
【问题描述】:

通常我通过 SSH 连接到我的 EC2 实例并运行:

source MYVENV/bin/activate

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

我尝试按照这里的步骤操作无济于事

Cron and virtualenv

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

这是我上面的当前设置。

我在日志中收到以下错误:

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

【问题讨论】:

标签: python cron virtualenv


【解决方案1】:

创建一个shell脚本 例如scripts.sh

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

然后在cron中放

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

该脚本将加载您所有的环境变量并从您环境中的 python 执行

【讨论】:

    【解决方案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 脚本中,然后运行它?
    【解决方案3】:

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

    MYENV/bin/python script.py
    

    要找出你的环境 python 解释器的目录是什么,切换到虚拟环境然后运行

    which python
    

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

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

    【讨论】:

    • 这个问题是它没有激活我的环境变量
    • 在这种情况下,您需要将python环境的路径添加到路径中,即。导出 PATH=/home/ec2-user/MYVENV:$PATH
    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多