10.11.2009 13:14

  1. mur4ik

    0 ↑
    0 ↓
    Добрый день. Ни как не могу запустить django-cron.
    Подскажите кто работал с ним.
    Скачал с http://code.google.com/p/django-cron/ крон, установил все как прописано в файле ридме.тхт. Но сам крон срабатывает только один раз-первый раз при инициализации, а дальше через определенный заданный интервал работать напрочь не хочет. Как я понял django-cron заменяет собой стандартный cron с linux'a. Но получается, что срабатывает он ровно один раз и толку от него как от крона вообще нет.
    Что и как делал(все по мануалу):

    1. Put 'django_cron' into your python path

    2. Add 'django_cron' to INSTALLED_APPS in your settings.py file

    3. Add the following code to the beginning of your urls.py file (just after the imports):

    import django_cron
    django_cron.autodiscover()


    4. Create a file called 'cron.py' inside each installed app that you want to add a recurring job to. The app must be installed via the INSTALLED_APPS in your settings.py or the autodiscover will not find it.

    Код cron.py
    from django.contrib.auth.models import User
    from django_cron import cronScheduler, Job

    class CheckMail(Job):
    # run every 60 seconds (1 minute)
    run_every = 60

    def job(self):
    # This will be executed every 1 minute
    user=User.objects.get(id=1)
    subject = "Test cron"
    message = "This is test message for check how cron works."
    user.email_user(subject, message, 'my_email@gmail.com')

    cronScheduler.register(CheckMail)
    'my_email@gmail.com' - работающий ящик.
  2. mur4ik

    0 ↑
    0 ↓
    у автора есть предупреждение на счет mod_python. использую тестовый встроенный сервер джанги
  3. master

    0 ↑
    0 ↓
    Сron он не заменяет, он ему помогает ))

    Т.е. стандартными средствами вашей операционной системы надо добавить новую задачу - crontab и так далее.
    Задача может быть такой: раз в минуту дергать manage.py в вашем проекте.
    Как только стандартный крон дернул ваш manage.py и запускается как раз django-cron. А в нем вы можете задать хоть десяток разных заданий.
  4. master

    0 ↑
    0 ↓
    хмм... только сейчас заметил, что это другое приложение ))

    я использую django-chronograph http://code.google.com/p/django-chronograph/

    но, думаю, принцип работы одинаковый у обоих.
    django-cron не устанавливал и, кстати, нигде не видел сравнения этих двух приложений.
    Скажите, если приложение понравится.


    Пример задания в стандартном кроне:
    * * * * * /usr/local/bin/python /usr/local/project/manage.py cron #starts cron jobs from django-chronograph
  5. mur4ik

    0 ↑
    0 ↓
    2 master
    спасибо. так и догадывался про этот крон. а хотелось так чтобы он полностью все делал)
    ваше приложение я тоже пробовал использовать, но без результата, так как не хотел использовать crontab. chronograph удобен что в админке можно легко изменять, добавлять.
  6. Интересно, почему все так активно не хотят использовать нормальный крон, а хотят заменить его чем-то другим, причём обязательно со словом "django"? Крон — это хороший и удобный инструмент, странно им не пользоваться.

  7. Сергей

    0 ↑
    0 ↓
    http://larin.in/archives/100
    Я использую этот метод
  8. mur4ik

    0 ↑
    0 ↓
    2 Иван
    да, стандартный крон хороший инструмент, и можно только им и обходиться.
    вот пожалуй чтото в оправдание
    Even on systems where cron/shell access is available, it is preferable to
    only have one actual cronjob and let django-cron do the rest, because that
    does not only make deployment easier, but also leads to cleaner application
    code.
    2 Сергей.
    да я видел когда гуглил
  9. master

    0 ↑
    0 ↓
    Интересно, почему все так активно не хотят использовать нормальный крон
    Может быть потому, что хочется иметь в приложении всё, что касается самого приложения.
    А не держать в голове кучу вещей, связанных с настройкой приложения в других местах.

    И если у меня, например, 10 заданий для крона, то при переезде на другой сервер мне придется все их вводить.
    К тому же, например, в моем случае мне удобнее редактировать задания через админку. И здесь, кстати, задания может изменять не только один человек - администратор сервера, но и другие пользователи (у которых есть соответствующие права в админке)
  10. Идея, что всё на свете будет контролировать только ваше Джанго-приложение, вообще говоря не живучая. Крон — это только одно из мест, где это очевидно не работает. Поэтому если вы хотите простого деплоймента, то нужно пользоваться для этого отдельными средствами (dpkg, pip, fabric — их полно). Этот тот шаг, который вам всё равно придётся совершить, если вы собираетесь делать что-то размером больше, чем домашний проект. Поэтому думать, что можно будет крон, миграцию данных, заведение пользователей и установку всякого доп. софта запихнуть в рамки Джанго — это самообман.

    Да, и джанговская админка — тоже хреновый инструмент для деплоймента :-).

  11. master

    0 ↑
    0 ↓
    Поэтому если вы хотите простого деплоймента, то нужно пользоваться для этого отдельными средствами (dpkg, pip, fabric — их полно)
    Да, вот до этого я еще не дорос. Даже и не слышал про такие ))
    Буду изучать, спасибо за науку!

    Как же много надо всего знать... А времени в сутках так мало.
  12. Iraqez

    0 ↑
    0 ↓
    Как извращенный вариантик, если так хотите все запускать из django, может поможет что то вроде sleep в каком то маленьком скрипте, с него будет подаваться, что допустим раз в 5 минут дергать manage.py, а сам скриптик будет запускать например через тот же, который стартует запуск wsgi? Хотя это конечно извращение, и ничего лучше cron всеравно нету )))

    P.S. А еще было бы неплохо, чтоб Django обзавелось app по варке кофе )

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.