Как написать работу 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 - это все, что требуется.