Как написать работу Ubuntu Upstart для Celery (django-celery) в virtualenv
Мне очень нравится использовать выскочку. В настоящее время у меня есть upstart jobs, чтобы запускать различные экземпляры gunicorn в нескольких виртуальных версиях. Тем не менее, 2-3 примера, которые я нашел для сценариев с выдержкой из сельдерея на межсетевых экранах, не работают для меня.
Итак, со следующими переменными, как мне написать задачу Upstart для запуска django-сельдерея в virtualenv.
Путь к проекту Django:
/srv/projects/django_project
Путь к этому проекту virtualenv:
/srv/environments/django_project
Параметр "Путь к сельдерею" - это файл настроек проекта Django (django-celery):
/srv/projects/django_project/settings.py
Путь к файлу журнала для данного экземпляра Celery:
/srv/logs/celery.log
Для этого виртуального env пользователь:
iamtheuser
и группа:
www-data
Я хочу запустить Celery Daemon с помощью celerybeat, поэтому команда, которую я хочу передать на django-admin.py(или manage.py), это:
python manage.py celeryd -B
Будет еще лучше, если script начнется после начала операции по стрельбе и остановится, когда прекратится работа по стрельбе. Скажем, файл для этого:
/etc/init/gunicorn.conf
Ответы
Ответ 1
Возможно, вам потребуется добавить еще какую-нибудь конфигурацию, но это выскочка script, которую я написал для запуска django-celery в качестве конкретного пользователя в virtualenv:
start on started mysql
stop on stopping mysql
exec su -s /bin/sh -c 'exec "$0" "[email protected]"' user -- /home/user/project/venv/bin/python /home/user/project/django_project/manage.py celeryd
respawn
Это отлично работает для меня.
Я знаю, что он выглядит уродливым, но он, по-видимому, является нынешней "правильной" техникой для запуска upstart-заданий как непривилегированных пользователей на основе этого ответа суперпользователя.
Я думал, что мне пришлось бы сделать больше, чтобы заставить его работать внутри виртуального, но вызов двоичного кода python внутри virtualenv - это все, что требуется.