芹菜任务没有被处理

Nat*_*ski 6 python task rabbitmq celery broker

我试图过程中使用芹菜某些任务,而我并没有太多的运气.我运行celeryd和celerybeat作为后台.我有一个tasks.py文件看起来像这样一个简单的应用程序和任务定义:

from celery import Celery

app = Celery('tasks', broker='amqp://user:pass@hostname:5672/vhostname')

@app.task
def process_file(f):
    # do some stuff
    # and log results
Run Code Online (Sandbox Code Playgroud)

此文件是从process.py我用来监视文件更改的另一个文件中引用的,如下所示:

from tasks import process_file

file_name = '/file/to/process'
result = process_file.delay(file_name)
result.get()
Run Code Online (Sandbox Code Playgroud)

有了这样的小码,芹菜是无法看到任务和处理它们.我可以在Python解释器执行类似的代码和芹菜对其进行处理:

py >>> from tasks import process_file
py >>> process_file.delay('/file/to/process')
<AsyncResult: 8af23a4e-3f26-469c-8eee-e646b9d28c7b>
Run Code Online (Sandbox Code Playgroud)

当我运行从解释的任务然而,beat.log并且worker1.log不显示已收到任务的任何指示,但使用logging我可以证实在执行任务的代码.也有在没有明显的错误.log文件.什么可能导致这个问题的想法?

/etc/default/celerybeat看起来像:

CELERY_BIN="/usr/local/bin/celery"
CELERYBEAT_CHDIR="/opt/dirwithpyfiles"
CELERYBEAT_OPTS="--schedule=/var/run/celery/celerybeat-schedule"
Run Code Online (Sandbox Code Playgroud)

而且/etc/default/celeryd:

CELERYD_NODES="worker1"
CELERY_BIN="/usr/local/bin/celery"
CELERYD_CHDIR="/opt/dirwithpyfiles"
CELERYD_OPTS="--time-limit=300 --concurrency=8"
CELERYD_USER="celery"
CELERYD_GROUP="celery"
CELERYD_LOG_FILE="/var/log/celery/%N.log"
CELERYD_PID_FILE="/var/run/celery/%N.pid"
CELERY_CREATE_DIRS=1
Run Code Online (Sandbox Code Playgroud)

Nat*_*ski 7

所以我通过从cli运行celery而不是作为守护进程来解决我的问题,使我能够看到更详细的错误输出.我这样做是通过运行:

user@hostname   /opt/dirwithpyfiles $ su celery
celery@hostname /opt/dirwithpyfiles $ celery -A tasks worker --loglevel=info
Run Code Online (Sandbox Code Playgroud)

在那里我可以看到权限问题正在发生,因为celery当我从python解释器运行命令作为我的普通用户时没有发生.我通过更改权限来修复此问题,/file/to/process以便两个用户都可以从中读取.