Django, как запустить внешний модуль в качестве демона - PullRequest
0 голосов
/ 07 октября 2018

Есть ли правильный способ запустить бесконечную задачу из Django Framework?Мне нужно запустить MQTT-клиент (на основе Paho) ​​и реализацию Python PID.

Я хочу использовать Django в качестве "Orhestrator", потому что я хочу запускать демоны только в том случае, если django работает.

Я использую django из-за его простоты для создания Rest API и слоя ORM.

Единственный способ, который я нашел (здесь, на github), это изменить __init__.py, включая здесь мой внешний модуль -> Как использовать клиент paho mqtt в django? .

Это мне не подходит, потому что он запускает демоны при каждой задаче управления django.

Кто-нибудь уже решил эту проблему??Заранее спасибо.

1 Ответ

0 голосов
/ 07 октября 2018

Что касается меня, я использую supervisor для демонизации моих команд управления django.

Поскольку все мои проекты django выполняются в virtualenv, я создал скрипт для инициализации virtualenvперед запуском команды управления:

/ home / cocoonr / run_standalone.sh

#/bin/bash
export WORKON_HOME=/usr/share/virtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
workon cocoonr  # name of my virtualenv

django-admin "$@"

А вот пример конфигурации супервизора для команды

/ etc / supervisor / conf.d / cocoonr.conf

[program:send_queued_mails_worker]
command=/bin/bash /home/cocoonr/run_standalone.sh send_queued_mails_worker
user=cocoonr
group=cocoonr
stopasgroup=true
environment=LANG=fr_FR.UTF-8,LC_ALL=fr_FR.UTF-8
stderr_logfile=/var/log/cocoonr/send_queued_mails_worker.err
stdout_logfile=/var/log/cocoonr/send_queued_mails_worker.log
...