Скрипт django-хронографа не запускается из задания cron или вручную из-за проблем с разрешениями - PullRequest
1 голос
/ 15 сентября 2011

Я создал пользовательскую команду управления в виде py-файла в обычном месте.

хронограф установлен в нужном месте и синхронизируется нормально.

Я создал задание cron следующим образом

* * * * * /home/shofty/virtualenvs/webbricks/bin/chronograph -e /home/shofty/virtualenvs/webbricks/bin/activate_this.py -p /home/shofty/virtualenvs/webbricks/website

ive также попробовал следующее, так как ядумаю, что это может быть правильно, но не то, что в документации

* * * * * /home/shofty/virtualenvs/webbricks/bin/chronograph -e /home/shofty/virtualenvs/webbricks/bin/activate_this.py -p /home/shofty/virtualenvs/webbricks/website/manage.py cron

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

оба задания не запускаются, но когда я пытаюсь запустить их вручную, как su или мой пользователь, они терпят неудачуиз-за разрешений отказано.не уверен, какое разрешение они имеют в виду.кто-нибудь сталкивался с этим раньше?

Ответы [ 4 ]

1 голос
/ 30 сентября 2011

Ответом было то, что chronograph.sh был заменен хронографом.несмотря на то, что якобы была возможность активировать env, он не делал этого достаточно рано для импорта argparse, который, насколько я могу судить, не встроен в python 2.5, а в 2.6.тогда нужно просто получить правильную комбинацию аргументов для скрипта хронографа, который для справки представляет собой -p и -e, но не -s.

также мне пришлось запустить скрипт от имени root, но нацеливаясьскрипт внутри пользователей virtualenv.

наконец, мне также пришлось добавить пути к каталогу пакетов для скрипта хронографа, так как он не мог найти argparse, пока я не сделал этого.

0 голосов
/ 21 сентября 2011

Поскольку вы используете виртуальную среду: Включен скрипт под названием chronograph.sh. Скопируйте этот файл в каталог вашего проекта.

cp chronograph.sh ~/virtualenvs/webbricks/chronograph.sh

Вам нужно открыть этот скрипт и изменить путь к вашей виртуальной среде activate. скрипт ::

$PROJECT_PATH"/home/shofty/virtualenvs/webbricks/bin/activate"

Убедитесь, что этот файл является исполняемым, а затем обновите crontab для выполнения сценарий.

chmod a-x chronograph.sh

Тогда: crontab -e

* * * * * /home/shofty/virtualenvs/webbricks/chronograph.sh /home/shofty/virtualenvs/webbricks/website

Убедитесь, что вы передали /path/to/your/project сценарию в качестве первого аргумента. Это должно гарантировать, что у cron не должно быть проблем с поиском директории вашего проекта.

0 голосов
/ 21 сентября 2011

Отказано в разрешении или вы получаете 403?Если это 403, я думаю, что это, скорее всего, вызвано защитой CSRF от Django.Если ваш сценарий публикуется в определенном представлении, обязательно отметьте его как csrf_exempt

Если отказано в разрешении на уровне файловой системы / операционной системы, тогда я не знаю точно.

0 голосов
/ 21 сентября 2011

Это может пригодиться для решения проблемы с правами доступа к файлам. Основы прав доступа к файлу

Вы пытались запустить задание cron от имени соответствующего пользователя / службы?

Чтобы отредактировать записи в crontab других пользователей Linux, войдите в систему как root и используйте -u {username} -e, как показано ниже.

root@dev-db# crontab -u otheruser -e
@monthly /home/otheruser/fedora/bin/monthly-backup
00 09-18 * * * /home/otheruser/ubuntu/bin/check-db-status
...