Задачи Celery из разных приложений в разных файлах журнала

Я ищу конфигурацию Celery на моем FreeBSD сервере, и у меня возникают проблемы с файлами журнала.

Моя конфигурация:

  • Сервер FreeBSD
  • 2 приложения Django: app1 и app2
  • Демонизируется сельдерей и Redis
  • У каждого приложения своя задача Celery

Файл конфигурации My Celery:

У меня в / etc / default / celeryd_app1:

# Names of nodes to start
CELERYD_NODES="worker"

# Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/www/app1/venv/bin/celery"

# App instance to use
CELERY_APP="main"

# Where to chdir at start.
CELERYD_CHDIR="/usr/local/www/app1/src/"

# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"

# Set logging level to DEBUG
#CELERYD_LOG_LEVEL="DEBUG"

# %n will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/app1/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/app1/%n.pid"

# Workers should run as an unprivileged user.
CELERYD_USER="celery"
CELERYD_GROUP="celery"

# If enabled pid and log directories will be created if missing,
# and owned by the userid/group configured.
CELERY_CREATE_DIRS=1

У меня точно такой же файл для celeryd_app2

Файл настроек Django с настройками Celery:

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_IGNORE_RESULT = False
CELERY_TASK_TRACK_STARTED = True
# Add a one-minute timeout to all Celery tasks.
CELERYD_TASK_SOFT_TIME_LIMIT = 60

Обе настройки имеют один и тот же порт Redis.

Моя проблема:

Когда я выполняю задачу с сельдереем для app1, я нахожу журналы этой задачи в файле журнала app2 с такой проблемой:

Received unregistered task of type 'app1.task.my_task_for_app1'
...
KeyError: 'app1.task.my_task_for_app1'

Есть проблема в моем конфигурационном файле Celery? Мне нужно установить другой порт Redis? Если да, как я могу это сделать?

Большое тебе спасибо


person Essex    schedule 13.03.2019    source источник


Ответы (1)


Думаю, проблема заключается в том, что вы используете одну и ту же базу данных Redis для обоих приложений:

CELERY_BROKER_URL = 'redis://localhost:6379'

Ознакомьтесь с руководством по использованию Redis в качестве брокер. Просто измените базу данных для каждого приложения, например

CELERY_BROKER_URL = 'redis://localhost:6379/0'

а также

CELERY_BROKER_URL = 'redis://localhost:6379/1'
person Tomáš Linhart    schedule 14.03.2019
comment
Я попробовал это решение, но оно не сработало. Но проблема в моей ошибке. Я перезапустил обе задачи celeryd, но не сделал touch для перезагрузки настроек django. Мне нужно несколько попыток, но, похоже, это сработало! - person Essex; 14.03.2019