Используя crontab с django [дубликат]

11
задан crivateos 8 July 2010 в 00:58
поделиться

5 ответов

Я бы рекомендовал вариант 3: использовать систему jobs в django-extensions. Соответствующие команды расширения:

  • create_jobs - Создает структуру каталога команды Django jobs для заданного имени приложения в текущем каталоге. Это часть впечатляющей системы заданий.
  • runjob - запускает одно задание на обслуживание. Часть системы jobs.
  • runjobs - запуск запланированных заданий обслуживания. Укажите ежечасно, ежедневно, еженедельно, ежемесячно. Часть системы заданий.

Это позволяет вам управлять всей обработкой заданий внутри Django, так что вам не нужно постоянно возиться с crontab.

1
ответ дан 3 December 2019 в 00:59
поделиться

Я написал несколько приложений командной строки, используя метод, аналогичный вашему первому варианту. Я предпочитаю делать это таким образом, а не использовать переменную среды DJANGO_SETTINGS_MODULE , потому что это больше похоже на обычную программу Python (для меня).

Вы также должны отметить, что вам не обязательно помещать ваш модуль в тот же каталог, что и ваш settings.py ; вы можете использовать абсолютный путь Python к вашему модулю настроек:

from django.core.management import setup_environ
from project import settings
setup_environ(settings)
#The rest of your imports

PEP 8 в любом случае не одобряет относительный импорт.

Я всегда устанавливаю свои приложения Django в пакетах сайтов ( /usr/lib64/python2.6/site-packages в Gentoo), поэтому мне не нужно беспокоиться о настройке PYTHONPATH из моих crontab, но я не думаю, что это широко применяемый метод. Мне также нравится использовать setuptools Automatic Script Creation , чтобы мои сценарии консоли помещались там, где они должны быть (например, / usr / bin ), и автоматически получали соответствующие имена. Ваш первый вариант также способствует этому.

1
ответ дан 3 December 2019 в 00:59
поделиться

Существует также django-cron . Пользоваться им очень просто, больше не нужно ничего устанавливать и настраивать.

Однако , я не уверен, как это работает на самом деле ... Я имею в виду, что я не знаю, как выполняются задания и , выполняются ли они вообще, когда никто не выполняет запрос на сайт. Но вы можете попробовать!

1
ответ дан 3 December 2019 в 00:59
поделиться

У меня работает вариант 1. Обычно у меня есть скрипт cd в каталог проекта, а затем я делаю "python ./script_name.py", чтобы не было загадочных проблем с путями ... ленивый, но он работает стабильно.

0
ответ дан 3 December 2019 в 00:59
поделиться

я бы предложил создать вашу функциональность как django-management-command и запускать ее через crontab

если ваша команда send_newsletter, то просто

0 0 * * * python /path/to/project/manage.py send_newsletter

и вам не нужно заботиться об установке модуля настроек в этом случае/

34
ответ дан 3 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: