Flask + uWSGI + Celery - 如何将Celery作为守护进程启动

时间:2017-05-03 09:09:45

标签: python flask celery uwsgi

我需要帮助,在uWSGI.ini文件中将Celery守护程序作为smart-attach-daemon启动。

当我从命令行使用命令启动Celery服务器时: /home/xxxxx/xxxxx/venv/bin/celery worker -A celery_worker.celery --loglevel=info --purge 一切都很棒。

但我不知道如何将此服务器作为守护进程启动。

在文档中(http://uwsgi-docs.readthedocs.io/en/latest/AttachingDaemons.html) 是信息:

管理芹菜:

[uwsgi]
master = true
socket = :3031
smart-attach-daemon = /tmp/celery.pid celery -A tasks worker --pidfile=/tmp/celery.pid

当我使用时:

smart-attach-daemon = %(base)aaa/celery.pid %(base)venv/bin/celery worker --pidfile=%(base)aaa/celery.pid --config=%(base)celeryconfig.py --workdir=%(base)app

在日志中我看到:

[uwsgi-daemons] found valid/active pidfile for "/home/xxxx/xxxxx/venv/bin/celery worker --pidfile=/home/xxxx/xxxxx/aaa/celery.pid --config=/home/xxxx/xxxxx/celeryconfig.py" (pid: 6901)

和芹菜可能工作正常。

但是当我尝试为我的工作人员添加“-A”参数时:

smart-attach-daemon = %(base)aaa/celery.pid %(base)venv/bin/celery -A celery_worker.celery --pidfile=%(base)aaa/celery.pid --config=%(base)celeryconfig.py --workdir=%(base)app

在日志中我看到错误消息:

ImportError: No module named 'celery_worker'

请问,我如何使用特定的工作文件启动我的Celery服务器?

或者,我如何运行命令:

`/home/xxxxx/xxxxx/venv/bin/celery worker -A celery_worker.celery --loglevel=info --purge

as smart-attach-daemon?

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

你可以发布你的整个uwsgi配置文件吗?

我认为它与uwsgi没有正确识别你的virtualenv目录/ PYTHONPATH有关。

尝试将这些添加到您的uwsgi文件中:

[uwsgi]
chdir = /home/xxxxx/xxxxx
home = /home/xxxxx/xxxxx/venv/
...

答案 1 :(得分:0)

通常,假设您的 app.py 位于以下 base 目录下,这应该可以工作。

[uwsgi]
base = /home/project
chdir = %(base)
module = app
pythonpath = %(base)
virtualenv = %(base)/venv
wsgi-file = %(base)/app.py
master = true
smart-attach-daemon = %(base)/tmp/celery.pid %(virtualenv)/bin/celery -A %(module).celery  worker --pidfile=%(base)/tmp/celery.pid
socket = %(base)/socket.sock
chmod-socket = 777
processes = 4
threads = 4
logto = %(base)/log/%n.log
stats = 127.0.0.1:9191