【问题标题】:How do I run my python command as a cron while loading my environment vars?如何在加载环境变量时将我的 python 命令作为 cron 运行?
【发布时间】:2019-06-20 21:46:43
【问题描述】:

我在 Django 中使用 Python 3.7。我想在我运行的地方设置一个 cron 作业(“crontab -e”)

davea$ /bin/bash -l -c 'cd /Users/davea/Documents/workspace/mainpage_project; ./venv/bin/activate; python manage.py runstats'

但是,在运行时,我得到了错误

  File "manage.py", line 14
    ) from exc

如果我跑了

cd /Users/davea/Documents/workspace/mainpage_project; ./venv/bin/activate; python manage.py runstats

一切运行良好,但我想加载环境变量,这就是我尝试前一个命令的原因。有没有办法修复第一个命令,以便我可以加载我的环境变量并执行我的脚本?下面是我的“manage.py”文件...

#!/usr/bin/env python
import os
import sys

if __name__ == '__main__':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mainpage_project.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc          # line 14
    execute_from_command_line(sys.argv)

【问题讨论】:

  • 虽然 cron 作业可以完成您需要的工作,但仍然强烈建议您查看 celery beats
  • 您显示的错误不完整。但我以前见过它,这是一个语法错误,不是吗?它表明您的命令正在使用错误的 python 版本(2.x 系统版本而不是 3.x)运行。您激活 venv 的命令是错误的,应该是 source ./venv/bin/activate
  • 谢谢@dirkgroten。这确实是问题所在。

标签: python django python-3.x cron environment-variables


【解决方案1】:

是的,您应该使用 source ./venv/bin/activate 打开 virtualenv 正如@dirkgorten 建议的那样

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 2017-05-05
    • 2015-06-23
    • 2020-06-20
    • 1970-01-01
    • 2018-03-05
    • 2015-12-07
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多