【问题标题】:A crontab script accessing Django models fails with ImportError访问 Django 模型的 crontab 脚本因 ImportError 而失败
【发布时间】:2014-08-25 17:34:23
【问题描述】:

我正在尝试使用 crontab 定期执行 python 脚本。我按照here 给出的解决方案使用 virtualenv 执行命令。以下是我的 crontab

SHELL=/bin/bash
HOME=/
MAILTO="myid@example.com"
* * * * * cd /home/jaskaran/edmhunters && /home/jaskaran/edmhunters/env/bin/python /home/jaskaran/edmhunters/scripts/db/songlist.py

我不断收到此 ImportError

Traceback (most recent call last):
 File "/home/jaskaran/edmhunters/scripts/db/songlist.py", line 4, in <module>
   from hunt.models import DJ, Song
ImportError: No module named hunt.models

脚本从 shell 运行时运行良好。我错过了什么?

【问题讨论】:

  • 尝试将这两行放到一个shell脚本中然后运行它,看看从shell运行时是否弹出错误,然后在cronjob中再试一次。
  • @metatoaster 如果从 shell 脚本运行,我会得到同样的错误。 source env/bin/activate/home/jaskaran/edmhunters/env/bin/python 似乎工作方式不同。
  • 尝试进入其他目录并通过绝对路径运行脚本,并激活该 virtualenv。我怀疑hunt.models 没有某种.egg-link

标签: python django cron


【解决方案1】:

由于 Django 加载其 INSTALLED_APPLICATIONS 的方式以及 Django 尝试访问其设置时出现的所有隐式代码,Django 导入错误通常会产生误导。

要解决此问题,请从您的脚本中创建一个Django management command

如果您需要从 shell 脚本或 cron 运行 virtualenv 的 Django 脚本或管理命令,请尝试以下语法:

 export DJANGO_SETTINGS_MODULE=mymodule.settings ; /srv/django/myproject/venv/bin/python /srv/django/myproject/manage.py MyManagementCommand

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2015-09-10
    • 2020-11-15
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多