Celery定期任务作为Python的守护程序



我想在Ubuntu实例上设置一个简单的python应用程序作为周期性的芹菜任务。我已经按照Celery文档设置了推荐的结构:

proj/__init__.py
/celery.py
/tasks.py

这很好用,我可以从..运行定期任务/项目使用:

celery worker -B --app=proj

然后,我复制了celeyd和celeybeat文件,并编辑了默认文件。

然而,当我启动守护进程时,celeryd会运行,但似乎找不到celery.py配置,并记录一个拒绝连接的错误。

我认为这一定与中的路径有关

#/etc/default/celeryd:
# Where to chdir at start.
CELERYD_CHDIR="/home/user/"
CELERY_CONFIG_MODULE="/home/user/proj"

除了更改CELERYD_USER之外,我还保留了文档中指定的其他设置。

我觉得我也应该在配置中使用--app,也许还应该指定我的python环境,但我不确定在哪里或如何(我没有运行虚拟环境)。

我现在也在为同样的事情而挣扎。这就是我的看法:

通信应用程序的两端执行任务,工作者执行任务。

工人不需要知道应用程序对于工作人员来说,了解celeryconfig就足够了。您可以将它传递给celenit-worker--config=mypackage.celeryconfig。worker将使用BROKER_URL连接到队列。记住在那里声明CELERY_IMPORTS,这样工人就知道在哪里查找任务定义。

客户端应用程序必须知道将请求发送到哪里。因此,必须使用其中一种传递配置文件的方法来传递相同的配置。我选了这个:

from __future__ import absolute_import
from celery import Celery
celery = Celery()
import backend.async.celeryconfig
celery.config_from_object(backend.async.celeryconfig)

当我在没有deamon的情况下运行它时,这个设置对我有效,但由于某种原因,deamon会忽略我的CELERY_CONFIG_MODULE设置。


更新:

CELERY_CONFIG_MODULE未在/etc/init.d/celeryd脚本中的任何位置使用

相反,我把它放在CELERYD_OPTS中,它就像一个符咒。:

CELERYD_OPTS="--config=backend.async.celeryconfig"

另一件事是,在celeryd脚本中也忽略了VIRTUAL_ENV变量。另一方面,scirpt激活了虚拟环境,所以我建议的配置是:

CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule --config=backend.async.celeryconfig"
VIRTUAL_ENV="/path/to/.virtualenvs/your_env"
# Python interpreter from environment.
ENV_PYTHON="$VIRTUAL_ENV/bin/python"
# How to call "celeryd-multi"
CELERYD_MULTI="$VIRTUAL_ENV/bin/celeryd-multi"
#CELERYD="$VIRTUAL_ENV/celeryd"
# How to call "celeryctl"
CELERYCTL="$VIRTUAL_ENV/bin/celeryctl"
# How to call "celerybeat"
CELERYBEAT="$VIRTUAL_ENV/bin/celerybeat"

相关内容

  • 没有找到相关文章

最新更新