调度django自定义命令

调度django自定义命令,django,cron,Django,Cron,我很难让自定义命令按计划运行。我尝试了一个cronjob和,但我似乎无法让它像从命令行成功运行一样运行 我正在使用安装在Ubunutu上的django本地开发一个应用程序 我有一个自定义命令,用于清除超过30天的日志条目。为了反复测试,我对其进行了修改,使其仅删除一个任意条目: from datetime import datetime, timedelta from hitcount.models import Hit from django.core.management.base impo

我很难让自定义命令按计划运行。我尝试了一个cronjob和,但我似乎无法让它像从命令行成功运行一样运行

我正在使用安装在Ubunutu上的django本地开发一个应用程序

我有一个自定义命令,用于清除超过30天的日志条目。为了反复测试,我对其进行了修改,使其仅删除一个任意条目:

from datetime import datetime, timedelta
from hitcount.models import Hit
from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):
    args = '<days>'
    help = 'Clear out all Hits that occured over "days" days ago'

    def handle(self, *args, **options):
        list = Hit.objects.filter(created__lt = datetime.now()-timedelta(days=2) )
        list[0].delete()

        self.stdout.write('Hit deleted - %s' % list[0])
如前所述,我可以从我的project_dir成功运行此命令

python manage.py del_hit
我试着安装。它似乎很有用。它识别出我的命令,并允许我从下拉列表中选择它。我按照指示应用了cron:

/home/vadmin/development/python/my_proj/manage.py cron 但是,当它尝试执行该命令时,它在日志中显示以下错误:

The job failed to run. The exception was :

Unknown command: u'del_hit'

Traceback (most recent call last):

File "/home/vadmin/development/python/my_proj/chronograph/models.py", line 213, in handle_run
call_command(self.command, *args, **options)

File "/usr/lib/python2.6/dist-packages/django/core/management/__init__.py", line 155, in call_command
raise CommandError("Unknown command: %r" % name)

CommandError: Unknown command: u'del_hit'
我尝试从标准视图运行命令:

from django.core.management import call_command
def test_del(request):
    list = Hit.objects.filter(created__lt = datetime.now()-timedelta(days=2) )

    args = []
    options = {}
    call_command('del_hit', *args, **options)

return render_to_response('test.html', {'del_hit_item':list[0]})
这确实成功地执行了

最后,我尝试设置一个cronjob,每小时执行一次

30 * * * * python /home/vadmin/development/python/my_proj/manage.py del_hit
这不起作用


我可以使用django计时器或简单的cronjob帮助使我的自定义命令按计划运行。看起来您需要在您的项目目录中才能正常工作

尝试更新您调用的命令以首先执行“cd”操作


cd/home/vadmin/development/python/my_proj&&./manage.py del_hit

要编写适合crontab的django脚本,请将以下几行放在顶部:

#!/usr/bin/python

from django.core.management import setup_environ
import settings
setup_environ(settings)

如果您的文件不在settings.py的同一文件夹中,请将您的应用程序文件夹附加到pythons路径。

您是从HEAD安装的还是已确认的版本?您是否尝试过将其暂时替换为旧版本?请参阅-这将需要DB重新同步,因为模型略有不同。您可以将命令更改为不接受参数-问题可能在于django Chronographer如何在args中传递?当您尝试通过crontab直接运行失败的命令时,您的id/var/log/syslog或cron日志对该命令有何评论?谢谢您的评论。我试着禁用这些参数。没有骰子。系统日志也没有说太多:Dec 23 09:53:01 vadmin CRON[4002]:vadmin CMD python/home/vadmin/development/python/my_proj/manage.py del_hit。我在哪里可以找到cron日志?@Ed:cron应该通过电子邮件向您发送cronjobs的任何输出。如果您使用的是roots crontab,请使用MAILTO这样的行=ed@acme.com在调用脚本的cron行之前。这是可行的,但是如果有人知道如何使用django chronograph,我也很乐意听到。啊-也许你的PYTHONPATH不包括项目的根目录?嗯。当我说:导入os,os.Enviro['PYTHONPATH'].spplitos.pathsep,我得到了['/home/vadmin/development/python/my_proj'],对于未来的读者来说,它现在已经被删除了:
#!/usr/bin/python

from django.core.management import setup_environ
import settings
setup_environ(settings)