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
我需要帮助在 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