2014-04-15 7 views
6

Ich versuche, einige Aufgaben mit Sellerie zu verarbeiten, und ich habe nicht zu viel Glück. Ich betreibe Sellerie und Sellerie als Dämonen. Ich habe eine tasks.py-Datei, die mit einer einfachen App wie folgt aussehen und Aufgabe definiert:Sellerie-Aufgaben, die nicht verarbeitet werden

from celery import Celery 

app = Celery('tasks', broker='amqp://user:[email protected]:5672/vhostname') 

@app.task 
def process_file(f): 
    # do some stuff 
    # and log results 

Und diese Datei aus einer anderen Datei referenziert wird process.py ich für Dateiänderungen überwachen verwenden, die wie folgt aussieht:

from tasks import process_file 

file_name = '/file/to/process' 
result = process_file.delay(file_name) 
result.get() 

Und mit diesem kleinen Code ist Sellerie nicht in der Lage, Aufgaben zu sehen und zu verarbeiten. Ich kann einen ähnlichen Code in der Python-Interpreter ausführen und Sellerie verarbeitet sie:

py >>> from tasks import process_file 
py >>> process_file.delay('/file/to/process') 
<AsyncResult: 8af23a4e-3f26-469c-8eee-e646b9d28c7b> 

Wenn ich die Aufgaben aus dem Interpreter jedoch laufen, beat.log und worker1.log zeigen keine Anzeichen dafür, dass die Aufgaben empfangen wurden, aber unter Verwendung von logging I kann bestätigen, dass der Taskcode ausgeführt wurde. Es gibt auch keine offensichtlichen Fehler in den .log Dateien. Irgendwelche Ideen, was könnte dieses Problem verursachen?

Meine /etc/default/celerybeat wie folgt aussieht:

CELERY_BIN="/usr/local/bin/celery" 
CELERYBEAT_CHDIR="/opt/dirwithpyfiles" 
CELERYBEAT_OPTS="--schedule=/var/run/celery/celerybeat-schedule" 

Und /etc/default/celeryd:

CELERYD_NODES="worker1" 
CELERY_BIN="/usr/local/bin/celery" 
CELERYD_CHDIR="/opt/dirwithpyfiles" 
CELERYD_OPTS="--time-limit=300 --concurrency=8" 
CELERYD_USER="celery" 
CELERYD_GROUP="celery" 
CELERYD_LOG_FILE="/var/log/celery/%N.log" 
CELERYD_PID_FILE="/var/run/celery/%N.pid" 
CELERY_CREATE_DIRS=1 

Antwort

7

Also habe ich hier mein Problem, indem Sellerie aus dem cli statt als Daemon läuft, so dass ich mehr sehen detaillierte Ausgabe der aufgetretenen Fehler. Ich tue dies, indem Sie:

[email protected] /opt/dirwithpyfiles $ su celery 
[email protected] /opt/dirwithpyfiles $ celery -A tasks worker --loglevel=info 

Dort konnte ich sehen, dass ein Problem mit den Berechtigungen vorging als celery Benutzer, die nicht passieren, wenn ich die Befehle aus dem Python-Interpreter als meine normalen Benutzer lief. Ich habe das behoben, indem ich die Berechtigungen von /file/to/process geändert habe, damit beide Benutzer davon lesen können.