【问题标题】:Running django standalone scripts in the crontab destroys any import commands related to django在 crontab 中运行 django 独立脚本会破坏任何与 django 相关的导入命令
【发布时间】:2013-07-23 03:39:16
【问题描述】:

我尝试了很多解决方案来解决这个问题,包括使用 django 的自定义管理命令、带有路径配置的 python 脚本和设置 DJANGO_ENV_VAR 等。当我尝试从 django 导入某些东西时,一切都会中断,例如:

from django.db

import django.utils

这是我的错误回溯之一的示例:

Traceback (most recent call last): 
File "/home/username/webapps/folder/Project/scripts/standalone.py", line 29, in 
<module> from Model.models import Model File "/home/username/webapps/folder/
Project/App/models.py", line 15, in <module> from django.db import models
ImportError: No module named django.db

在 crontab 中,我遵循了所有常规程序。所有时间配置都是正确的,所有脚本都以其完整路径调用,即。 /usr/bin/python2.7 或 /usr/bin/sh.

当这些脚本中的任何一个在 shell 而不是在 crontab 中运行时,它工作得很好: 喜欢:

python2.7 manage.py killModels

sh scrapper.sh >> log.log

这是 crontab:

8,38,58 * * * * ~/webapps/Folder/apache2/bin/start
#*/1 * * * * /bin/sh ~/webapps/Folder/Project/scripts/unpack.sh >> ~/webapps/Folder/Project/logs/unpack.log 2>&1
*/25 * * * * ~/bin/indexer Model_Model --rotate --config    
~/webapps/Folder/Project/misc/sphinx/sphinx.conf >> ~/webapps/Folder/Project/logs/searchd_log.txt
*/25 * * * * /bin/sh ~/webapps/Folder/Project/scripts/check_sphinx.sh >> ~/webapps/Folder/Project/logs/searchd_log.txt
0 2 * * * mysqldump --defaults-file=~/db_backups/Project_db.cnf -u Project_db Project_db >  ~/db_backups/Project_db-`date +\%Y\%m\%d`.sql 2>> ~/db_backups/cron.log
*/1 * * * * /usr/local/bin/python2.7 ~/webapps/Folder/Project/manage.py UpdateModels >> ~/webapps/Folder/Project/logs/unpack.log 2>&1

有人有什么想法吗?谢谢。

【问题讨论】:

  • 您使用的是virtualevn吗? kyou 得到了哪些具体错误?你收到 ImportError 了吗?
  • 不,我没有使用任何形式的 virtualenv,是吗?需要吗?我的确切错误是: Traceback(最近一次调用最后一次):文件“/home/username/webapps/folder/Project/scripts/standalone.py”,第 29 行,在 from Model.models import Model File “/home /username/webapps/folder/Project/App/models.py",第 15 行,在 from django.db import models ImportError: No module named django.db
  • Lucas,发布 crontab 行命令。您是否尝试在正确的文件夹中执行命令:* * ( cd /path/to/project ; /path/to/python manage.py command )
  • 好的,完整的 crontab 现在有问题了。
  • 我没有尝试以正确的顺序执行命令,除了句法之外有什么不同吗?

标签: python django crontab


【解决方案1】:

替换:

*/1 * * * * /usr/local/bin/python2.7 \
            ~/webapps/Folder/Project/manage.py UpdateModels \
            >> ~/webapps/Folder/Project/logs/unpack.log 2>&1

作者:

*/1 * * * * (cd ~/webapps/Folder/Project/; \
             /usr/local/bin/python2.7 manage.py UpdateModels) \
             >> ~/webapps/Folder/Project/logs/unpack.log 2>&1

通过此更改,manage.py 将能够定位 django 应用程序。

【讨论】:

  • 谢谢,我会尽快实施,但您知道如何修复我的独立 shell 脚本上的导入错误吗,这是更重要的一个。它的 cron 作业在这里: */1 * * * * /bin/sh ~/webapps/Folder/Project/scripts/unpack.sh >> ~/webapps/Folder/Project/logs/unpack.log 2>&1
  • 为澄清起见,shell 脚本的唯一目的是调用执行上述任务的 python 脚本,但它首先检查脚本本身是否已经在运行。当脚本调用models.py并在import django.db时出错,python脚本再次出现错误,谢谢。
猜你喜欢
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 2023-03-17
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多