Планирование пользовательской команды django - PullRequest
4 голосов
/ 23 декабря 2010

У меня проблемы с выполнением моей команды по расписанию.Я попробовал 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

Это не сработало.

Я мог бы использовать некоторую помощь в получении моей пользовательской команды длязапускать по расписанию, используя либо джанго-хронограф (желательно), либо простой кронхоб

Ответы [ 2 ]

4 голосов
/ 23 декабря 2010

Похоже, вы должны быть в каталоге вашего проекта, чтобы это работало правильно.

Попробуйте обновить команду, которую вы вызываете, чтобы сначала выполнить 'cd',

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

2 голосов
/ 23 декабря 2010

Чтобы написать сценарий django, подходящий для crontab, поместите эти строки вверху:

#!/usr/bin/python

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

Если ваш файл не находится в той же папке settings.py, добавьте папку приложения в путь к питонам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...