Django自定义命令和cron

Hel*_*nar 15 django cron crontab django-admin

我希望我的定制Django命令每分钟执行一次.然而,似乎python /path/to/project/myapp/manage.py mycommand在目录python manage.py mycommand工作完美时似乎不起作用.

我怎样才能做到这一点?我使用/etc/crontab:

****** root python /path/to/project/myapp/manage.py mycommand
Run Code Online (Sandbox Code Playgroud)

Joe*_*way 19

我认为问题是cron将在"裸"环境中运行您的脚本,因此您的DJANGO_SETTINGS_MODULE可能未定义.您可能希望将其包装在首先定义DJANGO_SETTINGS_MODULE的shell脚本中

像这样的东西:

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings 
./manage.py mycommand
Run Code Online (Sandbox Code Playgroud)

使其可执行(chmod + x),然后设置cron来代替运行脚本.

编辑

我还想说,你可以稍微"模块化"这个概念,并使你的脚本接受管理命令作为参数.

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings
./manage.py ${*}
Run Code Online (Sandbox Code Playgroud)

现在,您的cron作业可以简单地传递"mycommand"或您想要从cron作业运行的任何其他manage.py命令.


dav*_*her 12

cd /path/to/project/myapp && python manage.py mycommand
Run Code Online (Sandbox Code Playgroud)

通过链接这样的命令,除非cd正确更改目录,否则不会执行python.

  • 这对我不起作用(我的邮件中仍然有一个名为django.core.management的无模块) (2认同)

nab*_*und 9

如果您希望Django生活更简单,请在项目中使用django-command-extensions:

http://code.google.com/p/django-command-extensions/

您将找到名为"runscript"的命令,因此您只需将命令添加到crontab行:

****** root python /path/to/project/myapp/manage.py runscript mycommand
Run Code Online (Sandbox Code Playgroud)

这样的脚本将使用Django上下文环境执行.