从主机运行 supervisord,从 virtualenv(Django 应用程序)运行 celery

Has*_*aig 3 python django redis celery supervisord

我正在尝试使用 celery 和 redis 队列为我的 Django 应用程序执行任务。Supervisord 通过 安装在主机上apt-get,而 celery 驻留在我系统上的特定 virtualenv 中,通过`pip 安装。

结果,我似乎无法celery通过 supervisord 运行命令。如果我从 virtualenv 内部运行它,它可以正常工作,在它之外,它不会。如何让它在我当前的设置下运行?解决方案是否只是celery通过 apt-get安装,而不是在 virtualenv 中安装?请指教。

我在 /etc/supervisor/conf.d 中的 celery.conf 是:

[program:celery]
command=/home/mhb11/.virtualenvs/myenv/local/lib/python2.7/site-packages/celery/bin/celery -A /etc/supervisor/conf.d/celery.conf -l info
directory = /home/mhb11/somefolder/myproject
environment=PATH="/home/mhb11/.virtualenvs/myenv/bin",VIRTUAL_ENV="/home/mhb11/.virtualenvs/myenv",PYTHONPATH="/home/mhb11/.virtualenvs/myenv/lib/python2.7:/home/mhb11/.virtualenvs/myenv/lib/python2.7/site-packages"
user=mhb11
numprocs=1
stdout_logfile = /etc/supervisor/logs/celery-worker.log
stderr_logfile = /etc/supervisor/logs/celery-worker.log
autostart = true
autorestart = true
startsecs=10

stopwaitsecs = 600

killasgroup = true

priority = 998
Run Code Online (Sandbox Code Playgroud)

我的 Django 项目的文件夹结构是:

/home/mhb11/somefolder/myproject
??? myproject
?   ??? celery.py       # The Celery app file
?   ??? __init__.py     # The project module file (modified)
?   ??? settings.py     # Including Celery settings
?   ??? urls.py
?   ??? wsgi.py
??? manage.py
??? celerybeat-schedule
??? myapp
    ??? __init__.py
    ??? models.py
    ??? tasks.py        # File containing tasks for this app
    ??? tests.py
    ??? views.py
Run Code Online (Sandbox Code Playgroud)

如果我status通过 supervisorctl进行检查,我会command在尝试在 celery.conf 中运行时收到致命错误。帮助!

ps 请注意,用户mhb11没有 root 权限,以防万一。而且,/etc/supervisor/logs/celery-worker.log是空的。而且里面supervisord.log相关的错误我看到的是INFO spawnerr: can't find command '/home/mhb11/.virtualenvs/redditpk/local/lib/python2.7/site-packages/celery/bin/??celery'

Muh*_*hir 6

芹菜二进制文件的路径是myenv/bin/celery您正在使用的myenv/local/lib/python2.7/site-packages/celery/bin/cel????ery.

因此,如果您在终端上尝试传递给主管的命令 (command=xxx),您应该得到相同的错误。

您需要将command=xxxcelery.conf 中的内容替换为

command=/home/mhb11/.virtualenvs/myenv/bin/celery -A myproject.celery -l info
Run Code Online (Sandbox Code Playgroud)

请注意,我还-A用芹菜应用程序替换了参数,而不是主管配置。这芹菜应用相关项目目录集celery.conf

directory = /home/mhb11/somefolder/myproject
Run Code Online (Sandbox Code Playgroud)

附带说明一下,如果您将 Celery 与 Django 一起使用,则可以使用 Django 的 celery 管理 celery manage.py,无需直接调用 celery。喜欢

python manage.py celery worker
python manage.py celery beat
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请在此处阅读 Django Celery 的介绍。