2014-04-15 22 views
6

Próbuję przetworzyć niektóre zadania przy użyciu selera, a nie mam zbyt dużo szczęścia. Prowadzę selerię i celerybeat jako demony. Mam plik tasks.py które wyglądają jak to z prostej aplikacji i zadania zdefiniowane:Zadania selera nie są przetwarzane

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 

I plik ten jest określany z innego pliku process.py ja wykorzystać do monitorowania zmian w plikach, które wygląda następująco:

from tasks import process_file 

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

I z tym małym kodem, seler nie widzi zadań i ich nie przetwarza. Mogę wykonać podobny kod w interpreter Pythona i seler przetwarza je:

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

Kiedy uruchomić zadania z tłumacza jednak beat.log i worker1.log nie wykazują żadnych oznak, że zadania zostały otrzymane, ale przy użyciu logging I może potwierdzić wykonanie kodu zadania. Nie ma również oczywistych błędów w plikach .log. Jakieś pomysły, które mogą być przyczyną tego problemu?

My /etc/default/celerybeat wygląda następująco:

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

I /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 

Odpowiedz

7

więc pomyślałem mój problem tutaj uruchamiając seler z CLI zamiast jako demon, umożliwiając mi zobaczyć więcej szczegółowy wynik błędów, które się zdarzyły. Zrobiłem to przez wykonanie:

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

Nie mogłem zobaczyć, że problem uprawnienia dzieje się jako użytkownik celery tak się nie stało, kiedy wpadłem na polecenia z interpretera Pythona jako mojego normalnego użytkownika. Naprawiłem to, zmieniając uprawnienia z /file/to/process, aby obaj użytkownicy mogli z niego czytać.