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

Flask + uWSGI + Celery - How to start Celery as Daemon

我需要帮助在 uWSGI.ini 文件中启动 Celery 守护进程作为智能附加守护进程。

当我使用命令行从命令行启动 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)

Celery 可能工作正常。

但是当我尝试为我的工人添加“-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

作为智能附加守护进程?

感谢您的回答。

你能post你的整个 uwsgi 配置文件吗?

我认为这与 uwsgi 无法正确识别您的 virtualenv directory/PYTHONPATH。

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

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

一般来说,假设您的 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