У меня проблемы с выполнением моей команды по расписанию.Я попробовал cronjob и django-хронограф , но я не могу заставить его работать так, как он может (успешно) из командной строки.
Я просто разрабатываюприложение локально с использованием django, установленного на Ubunutu.
У меня есть настраиваемая команда, которую я использую для очистки записей журнала, возраст которых превышает 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])
Эта команда (del_hit.py) расположена в следующей структуре:
/project_dir
/app
/management
__init__.py
/commands
__init__.py
del_hit.py
Как я уже говорил, я могу успешно запустить эту команду из моего проекта_dir
python manage.py del_hit
Я попытался установить django-хронограф .Это кажется очень полезным.Он распознал мою команду и позволил мне выбрать ее из выпадающего списка.Я применил 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
Это не сработало.
Я мог бы использовать некоторую помощь в получении моей пользовательской команды длязапускать по расписанию, используя либо джанго-хронограф (желательно), либо простой кронхоб