Django & Cron
Программирование 15.04.2009
Интро
В предыдущей статье я описывал как выкладывать Django-проект на сервер и можно сказать попутно выкладывал. =) Но на этом мои “мучения” не закончились - оказалось, что я не знаю как прикрутить вызовы частей приложения по Cron.
Погуглив и почитав, решение нашлось… и оно оказалось намного приятнее решения на php ;)
Решение
В корневой директории проекта, в моем случае publishing, создаем фалик run.py:
# -*- coding: utf-8 -*-
import sys
import settings
from django.core.management import setup_environ
setup_environ(settings)
module_name = sys.argv[1]
exec('import %s' % module_name)
exec('%s.%s' % (module_name, ' '.join(sys.argv[2:])))
Update: Спасибо Александру Кошелеву за ценный комментарий.
И теперь при помощи этого скрипта мы можем вызывать функции наших “вьюшек” из командной строки и из cron:
# python /path/to/project/run.py report.views "send_emails()"
Таким образом у нас выполниться report.views.send_emails()
Все, остается вызвать crontab -e и добавть выше описанную команду.
Как всегда, все просто. =)







Обычно для настройки окружения достаточно более лаконичного:
from django.core.management import setup_environimport settings
setup_environ(settings)
# тут уже окружение настроено
Ну или совсем канонический вариант:-)
Слушайте, а что это за контроллер такой, который request не принимает?
Александр, спасибо!
Я знал, что у меня получился гнутый велосипед =)))
Сейчас попробую переделать по Вашим предложениям.
Согласен, не так выразился, все же это функция в данном примере, и request ей не нужен.
Толь добавь в run.py первой строчкой #!/usr/bin/env python , ну и chmod +x run.py
А не будет ли идеологически более правильным создать собственные команды для manage.py? Способ, так сказать, от производителей :)
Будет ) Об этом уже написал Александр Кошелев
Прикольно, у нас в goCarcas (PHP) тоже такой подход сейчас, то есть скрипту передается команда, а не выполняется сам скрипт…
Спасибо за информацию, метод полезен.
[...] 16:39 http://larin.in/archives/100Я использую этот [...]
[...] 0 А вот здесь описана технология для запуска искомых процедур по [...]