django芹菜守护进程不起作用

时间:2014-09-29 17:17:43

标签: python django celery daemon background-process

这是我的芹菜应用程序配置:

from __future__ import absolute_import

from celery import Celery

import os

from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tshirtmafia.settings')

app = Celery('tshirtmafia')
app.conf.update(
    CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

settings.py:

INSTALLED_APPS:

'kombu.transport.django',
'djcelery',

也:

BROKER_URL = 'django://'

这是我的任务:

@shared_task
def test():
    send_mail('nesamone bus', 'Files have been successfully generated.', 'marijus.merkevicius@gmail.com',
    ['marijus.merkevicius@gmail.com'], fail_silently=False)

现在,当我在本地运行本地python manage.py celeryd然后从本地运行test.delay()时,它可以工作。

现在我正在尝试部署我的应用。当使用完全相同的配置时,我尝试打开python manage.py celeryd,在其他窗口中我打开shell并运行测试任务,它不起作用。

我还试图像这样设置后台守护程序:

/ etc / default / celeryd configuration:

# Name of nodes to start, here we have a single node
CELERYD_NODES="w1"
# or we could have three nodes:
#CELERYD_NODES="w1 w2 w3"

# Where to chdir at start. (CATMAID Django project dir.)
CELERYD_CHDIR="/home/tshirtnation/"

# Python interpreter from environment. (in CATMAID Django dir)
ENV_PYTHON="/usr/bin/python"

# How to call "manage.py celeryd_multi"
CELERYD_MULTI="$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryd_multi"

# How to call "manage.py celeryctl"
CELERYCTL="$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryctl"

# Extra arguments to celeryd
CELERYD_OPTS="--time-limit=300 --concurrency=1"

# Name of the celery config module.
CELERY_CONFIG_MODULE="celeryconfig"

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

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

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="settings"

我使用默认的celery /etc/init.d/celeryd脚本。

所以基本上看起来像芹菜开始但不起作用。不知道如何调试这个以及可能出错的地方。

如果您还有其他需要,请告诉我

1 个答案:

答案 0 :(得分:1)

对我来说,芹菜在Django强大的系统中变成了一个非常反复无常的孩子。 用于了解问题原因的初始数据太少。 Celery守护程序失败的最常见原因是文件系统权限。 但要澄清我尝试的原因:

  1. 由django项目的用户所有者从命令行启动celery:

    celery -A proj worker -l info

  2. 如果工作正常,请进一步

    1. 以root用户身份以口头模式启动芹菜,就像守护进程一样:

      sudo sh -x /etc/init.d/celeryd start

    2. 这将显示守护程序脚本的大部分问题 - 芹菜用户和组使用,但不是全部,遗憾的是:权限失败不可见。

      我的小话。 通常Celery由自己的芹菜用户启动,而django项目由另一个启动。经过长时间的战斗芹菜和系统,我拒绝芹菜用户,并由django项目用户拥有芹菜加工。

      并且......不要忘记开始一次

      update-rc.d celerybeat defaults
      update-rc.d celeryd defaults
      

      这是为Ubuntu守护进程启动的,当然。

      祝你好运