调度django自定义命令
我很难让自定义命令按计划运行。我尝试了一个cronjob和,但我似乎无法让它像从命令行成功运行一样运行 我正在使用安装在Ubunutu上的django本地开发一个应用程序 我有一个自定义命令,用于清除超过30天的日志条目。为了反复测试,我对其进行了修改,使其仅删除一个任意条目:调度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
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)