如何用virtualenv编写Celery(django-celery)的Ubuntu Upstart工作

我真的很喜欢使用新贵。 我目前有暴发户的工作,在一些虚拟世界中运行不同的gunicorn实例。 但是,我在互联网上find的芹菜新贵脚本的2-3个例子并不适合我。

所以,有了以下变数,我将如何写一个Upstart工作来在虚拟环境中运行django-celery。

Django项目的path:

/srv/projects/django_project 

这个项目的艺术之路:

 /srv/environments/django_project 

芹菜设置的path是Django项目设置文件(django-celery):

 /srv/projects/django_project/settings.py 

这个Celery实例的日志文件的path:

 /srv/logs/celery.log 

对于这个虚拟环境,用户:

 iamtheuser 

和组:

 www-data 

我想用celerybeat来运行Celery Daemon,所以,我想传递给django-admin.py(或manage.py)的命令是:

 python manage.py celeryd -B 

如果脚本在gunicorn工作开始之后开始,那么会更好,并在gunicorn工作停止时停止。 我们说这个文件是:

 /etc/init/gunicorn.conf 

您可能需要添加更多的配置,但是这是我写的一个启动django-celery作为virtualenv中的特定用户的脚本:

 start on started mysql stop on stopping mysql exec su -s /bin/sh -c 'exec "$0" "$@"' user -- /home/user/project/venv/bin/python /home/user/project/django_project/manage.py celeryd respawn 

这对我很有效。

我知道这看起来很丑,但是这个超级用户的答案似乎是当前“非正式”的技术,以非特权用户的身份运行新兴工作。

我认为我将不得不做更多的工作在virtualenv里面,但是在virtualenv里面调用python二进制文件是它所需要的。