2
votes

I have a website project written with django, celery and rabbitmq. And a '.delay' task (the task creates a new folder) is called when a button is clicked.

Everything works fine with celery (the .delay task is called, and a new folder is created) when I run celery with manage.py like:

python manage.py celeryd

However, when I ran celery as the daemon, even there was no error, the task was not executed (no folder was created).

I was kind of following the tutorial: http://www.arruda.blog.br/programacao/django-celery-in-daemon/

My settings are:

  1. /etc/default/celeryd

:

# 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"

the correlated folders are created too

  1. for the '/etc/default/celeryd/init.d' file, I used this version: https://raw.github.com/ask/celery/1da3aa43d1e6de525beeda398d0acb8841d5b4d2/contrib/generic-init.d/celeryd

  2. for /var/www/myproject/myproject/settings.py, I have:

: 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',
    ...
)

There was no error when I start celery by using: /etc/init.d/celeryd start and no results neither. Does someone know how to fix the problem?

1

1 Answers

0
votes

Celery's docs have a daemon troubleshooting section that might be helpful. Celery has a flag that lets you run your init script without actually daemonizing, and that should show what's going wrong:

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

Newer versions of that init script have a dryrun command that's an easier-to-remember way to run the start command without daemonizing.