我真的很喜欢使用 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/