2011-09-12 11 views
5

W zeszłym tygodniu skonfigurowałem RabbitMQ i Selera na moim systemie produkcyjnym po przetestowaniu go na moim lokalnym dev i wszystko działało dobrze.Rabbitmq celeryd celerybeat nie wykonuje zadań w produkcji jako Daemon

Mam wrażenie, że moje zadania nie są wykonywane podczas produkcji, ponieważ mam około 1200 zadań, które wciąż znajdują się w kolejce.

Uruchomiłem konfigurację CentOS 5.4, z demonami celeryd i celerybeat i WSGI Dokonałem importu do modułu wsgi.

Kiedy biegnę, /etc/init.d/celeryd start mam następującą odpowiedź

[[email protected] myproject]# /etc/init.d/celeryd start 
celeryd-multi v2.3.1 
> Starting nodes... 
    > w1.myvm.centos01: OK 

Kiedy biegnę /etc/init.d/celerybeat start mam następującą odpowiedź

[[email protected] fundedmyprojectbyme]# /etc/init.d/celerybeat start 
Starting celerybeat... 

więc do wyjścia wydaje się, że przedmioty są wykonywane successully - chociaż patrząc na kolejki, wydaje się, że zyskują więcej niż egzekucję.

Teraz, jeśli wykonuję to samo wykonanie, ale używam menedżera aplikacji django zamiast: ./manage.py celeryd i ./manage.py celerybeat, zadania natychmiast zaczynają być przetwarzane.

Moi /etc/default/celeryd

# Where to chdir at start. 
CELERYD_CHDIR="/www/myproject/" 

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

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

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

moi /etc/default/celerybeat

# Where the Django project is. 
CELERYD_CHDIR="/www/myproject/" 

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

# Path to celeryd 
CELERYD="/www/myproject/manage.py celeryd" 

# Path to celerybeat 
CELERYBEAT="/www/myproject/manage.py celerybeat" 

# Extra arguments to celerybeat 
CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule" 

moje pliki do /etc/init.d/celeryd i/celerybeat oparte są na generic scripts

jestem brakuje część konfiguracji ???

+1

Może być przydatna czytać dzienniki że twój skrypt init powinien utworzyć na/var/log /, jeśli nie ma jakiegoś logu tworzonego kilka razy, to dlatego, że seler ma problem z utworzeniem pliku logu. Jaka jest różnica między twoim systemem produkcyjnym a twoim lokalnym? Czy jesteś pewien, że mają tę samą wersję python? –

Odpowiedz

1

Natknąłem się na sytuację, w której muszę dodać "python" jako przedrostek do zmiennej CELERYD_MULTI.

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

Z jakiegoś powodu, mój manage.py skrypt nie będzie wykonywać normalnie (chociaż ja chmod + x i skonfigurowane prawidłowo moja shebang Użytkownika). Można spróbować to aby sprawdzić, czy to działa.

0

Spróbuj uruchomić następujące i zobaczyć, co wyjście powie:

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

W moim przypadku były pewne problemy z uprawnieniami na /var/log dla użytkownika, który uruchamia seler jako