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

标签 django ubuntu celery django-celery upstart

我真的很喜欢使用 upstart。我目前有 upstart 工作可以在许多 virtualenvs 中运行不同的 gunicorn 实例。但是,我在互联网上找到的 2-3 个 Celery upstart 脚本示例对我不起作用。

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

Django 项目路径:

/srv/projects/django_project

此项目的 virtualenv 路径:

/srv/environments/django_project

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

/srv/projects/django_project/settings.py

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

/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

最佳答案

您可能需要添加更多配置,但这是我编写的用于在 virtualenv 中以特定用户身份启动 django-celery 的 upstart 脚本:

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

它对我很有用。

我知道它看起来很丑陋,但它似乎是当前以非特权用户身份运行 upstart 作业的“正确”技术,基于 this superuser answer .

我原以为我必须做更多的工作才能让它在 virtualenv 中运行,但在 virtualenv 中调用 python 二进制文件就足够了。

关于django - 如何在 virtualenv 中为 Celery (django-celery) 编写 Ubuntu Upstart 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250682/

相关文章:

python - Apache 中未加载模板标签

python - Django 没有获取对 settings.py 中 INSTALLED_APPS 的更改

laravel - Ubuntu终端: showing blank

ubuntu - 如何在 gnome shell 的 libnotify 中自动隐藏错误消息?

python - Celery - 如何让工作人员在运行 X 个任务后退出?

django - 从Django Docker向Nginx提供静态文件

html - 在 HTML/XML 文件中高效搜索

python - 如何从以前的 celery 任务中产生 celery 任务?

python - Celery - 无序执行的链式任务

python - 如何在不同应用程序的 django View 中获取登录用户