Моя библиотека - социальная сеть любителей книг

Интро

В предыдущей статье я описывал как выкладывать 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 и добавть выше описанную команду.

Как всегда, все просто. =)



Комментарии (9) на запись «Django & Cron»

  1. Александр Кошелев MonsterID Icon Александр Кошелев | 15.04.2009 в 22:06

    Обычно для настройки окружения достаточно более лаконичного:

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

    # тут уже окружение настроено

    Ну или совсем канонический вариант:-)

    Таким образом у нас выполниться функция-конроллер send_emails() приложения report.

    Слушайте, а что это за контроллер такой, который request не принимает?

  2. Larin MonsterID Icon Larin | 16.04.2009 в 09:12

    Александр, спасибо!
    Я знал, что у меня получился гнутый велосипед =)))
    Сейчас попробую переделать по Вашим предложениям.

    Слушайте, а что это за контроллер такой, который request не принимает?

    Согласен, не так выразился, все же это функция в данном примере, и request ей не нужен.

  3. Andrey MonsterID Icon Andrey | 14.08.2009 в 09:39

    Толь добавь в run.py первой строчкой #!/usr/bin/env python , ну и chmod +x run.py

  4. marazmiki MonsterID Icon marazmiki | 25.08.2009 в 14:36

    А не будет ли идеологически более правильным создать собственные команды для manage.py? Способ, так сказать, от производителей :)

  5. Larin MonsterID Icon Larin | 25.08.2009 в 14:40

    Будет ) Об этом уже написал Александр Кошелев

  6. adw0rd MonsterID Icon adw0rd | 05.09.2009 в 00:52

    Прикольно, у нас в goCarcas (PHP) тоже такой подход сейчас, то есть скрипту передается команда, а не выполняется сам скрипт…

  7. Виталий MonsterID Icon Виталий | 13.09.2009 в 17:22

    Спасибо за информацию, метод полезен.

  8. как работает django-cron | 10.11.2009 в 16:33

    [...] 16:39 http://larin.in/archives/100Я использую этот [...]

  9. Запуск процессов в определенный момент по времени | 09.08.2010 в 08:55

    [...] 0 А вот здесь описана технология для запуска искомых процедур по [...]

Оставить комментарий


Copyright, 1983 – 2010