0

我的 Celery 在 CLI 模式下运行良好:

  • 我的项目文件夹是这样组织的:jive/jive.py
  • jive.py 文件看起来像:

    app = Celery(include=['tasks.dummy_tasks','tasks.people_tasks',]) app.config_from_object(CELERY_CONFIG_PATH)

  • 我以这种方式在 CLI 中运行一个工作人员:celery worker -A jive当我在jive文件夹中时它可以工作。

最近,我尝试使用 systemd 守护 Celery

为此,需要 2 个文件。我将只为两者粘贴重要部分:

/etc/celery/conf.d

CELERYD_NODES="w1"
CELERY_BIN="/home/user1/venv/bin/celery"
CELERY_APP="jive"
CELERYD_MULTI="multi"

/etc/systemd/system/celery.service

[Service]
Type=forking
User=user1
EnvironmentFile=-/etc/celery/conf.d
WorkingDirectory=/home/user1
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'

运行服务时,显示状态后失败并出现以下错误:

    (venv) [user1@localhost jive]$ systemctl status celery.service
    ● celery.service - Celery Service
       Loaded: loaded (/etc/systemd/system/celery.service; disabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since Tue 2017-03-07 14:59:56 CET; 2s ago
      Process: 16493 ExecStart=/bin/sh -c ${CELERY_BIN} multi start ${CELERYD_NODES}    -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE}    --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS} (code=exited, status=1/FAILURE)
Mar 07 14:59:56 localhost.localdomain sh[16493]: File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
Mar 07 14:59:56 localhost.localdomain sh[16493]: ImportError: No module named 'jive'
Mar 07 14:59:56 localhost.localdomain sh[16493]: celery multi v4.0.2 (latentcall)

AttributeError: 'module' object has no attribute 'celery'-> 我怀疑 PATH 有问题,但不确定如何在服务中处理这个问题。谢谢你的帮助。

4

0 回答 0