Вопрос

Я хочу, чтобы моя специальная команда Django выполнялась каждую минуту.Однако похоже, что python /path/to/project/myapp/manage.py mycommand кажется, не работает в каталоге python manage.py mycommand работает отлично.

Как я могу этого добиться?я использую /etc/crontab с:

****** root python /path/to/project/myapp/manage.py mycommand
Это было полезно?

Решение

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

Что-то вроде этого:

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings 
./manage.py mycommand

Сделайте его исполняемым (chmod +x), а затем настройте cron для запуска сценария.

Редактировать

Я также хотел сказать, что вы можете немного «модулировать» эту концепцию и сделать так, чтобы ваш скрипт принимал команды управления в качестве аргументов.

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings
./manage.py ${*}

Теперь ваше задание cron может просто передать «mycommand» или любую другую команду Manage.py, которую вы хотите запустить из задания cron.

Другие советы

cd /path/to/project/myapp && python manage.py mycommand

Путем цепочки ваших команд, подобных этой, python не будет выполняться, пока cd не изменит каталог правильно.

Если вы хотите, чтобы ваша жизнь в Django была намного проще, используйте django-command-extensions в вашем проекте:

http://code.google.com/p/django-command-extensions /

Вы найдете команду с именем " runcript " так что вы просто добавляете команду в строку crontab:

****** root python /path/to/project/myapp/manage.py runscript mycommand

И такой скрипт будет выполняться в контекстной среде Django.

Это то, что я недавно сделал в одном из моих проектов (я поддерживаю venvs для каждого работающего проекта, поэтому я предполагаю, что у вас есть venvs)

 ***** /path/to/venvs/bin/python /path/to/app/manage.py command_name

Это отлично сработало для меня.

Расширение RunScript не было хорошо задокументировано. В отличие от команды django, эта команда может находиться в любом месте вашего проекта и требует наличия папки скриптов. Для файла .py требуется функция run ().

scroll top