如何在virtualenv中为Celery(django-celery)编写Ubuntu Upstart作业

15 django ubuntu upstart celery django-celery

我真的很喜欢使用暴发户.我目前有很多新手工作,可以在许多版本中运行不同的gunicorn实例.但是,我在互联网上找到的芹菜新贵脚本的2-3个例子对我不起作用.

因此,使用以下变量,如何编写Upstart作业以在virtualenv中运行django-celery.

Django项目之路:

/srv/projects/django_project
Run Code Online (Sandbox Code Playgroud)

这个项目的virtualenv的路径:

/srv/environments/django_project
Run Code Online (Sandbox Code Playgroud)

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

/srv/projects/django_project/settings.py
Run Code Online (Sandbox Code Playgroud)

此Celery实例的日志文件的路径:

/srv/logs/celery.log
Run Code Online (Sandbox Code Playgroud)

对于此虚拟环境,用户:

iamtheuser
Run Code Online (Sandbox Code Playgroud)

和小组:

www-data
Run Code Online (Sandbox Code Playgroud)

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

python manage.py celeryd -B
Run Code Online (Sandbox Code Playgroud)

如果脚本在gunicorn作业开始后启动,那将会更好,并且当gunicorn作业停止时停止.让我们说这个文件是:

/etc/init/gunicorn.conf
Run Code Online (Sandbox Code Playgroud)

dge*_*gel 16

您可能需要添加更多配置,但这是我为了启动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
Run Code Online (Sandbox Code Playgroud)

这对我很有效.

我知道它看起来很难看,但根据这个超级用户的回答,它似乎是以非特权用户身份运行新手工作的当前"正确"技术.

我认为我必须做更多工作才能让它在virtualenv中工作,但是在virtualenv中调用python二进制文件就足够了.