django-celery作为一个守护进程:不工作

时间:2016-06-07 19:47:43

标签: django rabbitmq celery daemon django-celery

我有一个用django,celery和rabbitmq编写的网站项目。一个' .delay'单击按钮时会调用task(任务创建一个新文件夹)。

当我使用manage.py运行芹菜时,芹菜(调用.delay任务,并创建一个新文件夹)的一切正常工作:

python manage.py celeryd

但是,当我将celery作为守护程序运行时,即使没有错误,也没有执行任务(没有创建文件夹)。

我有点关注教程:http://www.arruda.blog.br/programacao/django-celery-in-daemon/

我的设置是:

  1. 的/ etc /默认/ celeryd
  2. # Name of nodes to start, here we have a single node
    CELERYD_NODES="w1"
    
    # Where to chdir at start.
    CELERYD_CHDIR="/var/www/myproject"
    
    # How to call "manage.py celeryd_multi"
    CELERYD_MULTI="$CELERYD_CHDIR/manage.py celeryd_multi"
    
    # How to call "manage.py celeryctl"
    CELERYCTL="$CELERYD_CHDIR/manage.py celeryctl"
    
    # Extra arguments to celeryd
    CELERYD_OPTS=""
    
    # Name of the celery config module.
    CELERY_CONFIG_MODULE="myproject.settings"
    
    # %n will be replaced with the nodename.
    CELERYD_LOG_FILE="/var/log/celery/w1.log"
    CELERYD_PID_FILE="/var/run/celery/w1.pid"
    
    # Workers should run as an unprivileged user.
    #CELERYD_USER="root"
    #CELERYD_GROUP="root"
    
    # Name of the projects settings module.
    export DJANGO_SETTINGS_MODULE="myproject.settings"
    

    也会创建相关文件夹

    1. 用于' /etc/default/celeryd/init.d'文件,我用过这个版本: https://raw.github.com/ask/celery/1da3aa43d1e6de525beeda398d0acb8841d5b4d2/contrib/generic-init.d/celeryd

    2. /var/www/myproject/myproject/settings.py,我有:

    3. :     import djcelery

      djcelery.setup_loader()
      BROKER_HOST = "127.0.0.1"
      BROKER_PORT = 5672
      BROKER_VHOST = "/"
      BROKER_USER = "guest"
      BROKER_PASSWORD = "guest"
      
      INSTALLED_APPS = (
          'djcelery',
          ...
      )
      

      使用以下方法开始芹菜时没有错误:     /etc/init.d/celeryd start 也没有结果。有人知道如何解决问题吗?

1 个答案:

答案 0 :(得分:0)

Celery的文档有daemon troubleshooting section可能会有所帮助。 Celery有一个标志,可以让你运行你的init脚本而不用实际的守护进程,这应该显示出现了什么:

C_FAKEFORK=1 sh -x /etc/init.d/celeryd start

该初始化脚本的较新版本具有dryrun command,这是一种更容易记住的方式,无需守护进程即可运行启动命令。