Проблемы с запуском команды управления Django в качестве постоянно включенной задачи на PythonAnywhere
Я создал и развернул свой Django-сайт на PythonAnywhere.
У меня есть сценарий в моем
app/management/commands/my_command.py
, который я намерен постоянно запускать. Я пытался использовать для этого функцию PythonAnywhere Always On Task, но статус никогда не меняется с «запущен» на «запущен».
В самом скрипте проблем нет, потому что когда я запускаю:
bash
(venv) $ source /home/myusername/.virtualenvs/myenv/bin/activate && cd /home/myusername/myproject && python manage.py my_command
Сценарий успешно выполняется, и когда я перехожу в консоль Always On Task, я вижу, что он успешно выполнен и записан в этой консоли.
Но проблема в том, что я не хочу всегда вручную запускать его в консоли Bash.
Я следовал инструкциям на странице помощи PythonAnywhere и изменил команду задачи на все опции, которые я могу использовать. Я попробовал:
bash
source virtualenvwrapper.sh && workon myenv && python /home/myusername/myproject/manage.py my_command
Но он никогда не меняется на «запущен».
Я также пробовал:
bash
/home/myusername/.virtualenvs/myenv/bin/python /home/myusername/myproject/manage.py my_command
Опять же, он никогда не меняется на «работает».
Однако, если я запускаю сценарий в консоли Bash, задача Always On выводит сообщение об успехе!
Что я делаю не так?
Если задача застряла в состоянии «Запуск», скорее всего, она завершается сразу после запуска. Самый простой способ выяснить причину - посмотреть журнал задач, доступ к которому можно получить с помощью первой кнопки в столбце «Действие».
Также стоит отметить, что эта функциональность доступна только для платных аккаунтов. Я предполагаю, что это не так, но стоит обратить внимание.
Я решил проблему, указав в команде DJANGO_SETTINGS_MODULE. Правильная команда для задачи «Всегда включен» выглядит следующим образом:
DJANGO_SETTINGS_MODULE=myproject.settings /home/myusername/.virtualenvs/myenv/bin/python /home/myusername/myproject/manage.py my_command
Это позволило успешно запустить задачу и работать непрерывно, как и предполагалось.