2014-07-09 9 views
7

ich eine django app haben, in dem es eine Sellerie-Funktionalität hat, so kann ich kann den Sellerie erfolgreich wie unterSellerie als Daemon mit Supervisor läuft nicht funktioniert

celery -A tasks worker --loglevel=info 

aber als bekannte Tatsache laufen, dass wir müssen es als Daemon laufen und so habe ich die unten celery.conf Datei in /etc/supervisor/conf.d/ Ordner geschrieben

; ================================== 
; celery worker supervisor example 
; ================================== 

[program:celery] 
; Set full path to celery program if using virtualenv 
command=/root/Envs/proj/bin/celery -A app.tasks worker --loglevel=info 

user=root 
environment=C_FORCE_ROOT="yes" 
environment=HOME="/root",USER="root" 
directory=/root/apps/proj/structure 
numprocs=1 
stdout_logfile=/var/log/celery/worker.log 
stderr_logfile=/var/log/celery/worker.log 
autostart=true 
autorestart=true 
startsecs=10 

; Need to wait for currently executing tasks to finish at shutdown. 
; Increase this if you have very long running tasks. 
stopwaitsecs = 600 

; When resorting to send SIGKILL to the program to terminate it 
; send SIGKILL to its whole process group instead, 
; taking care of its children as well. 
killasgroup=true 

; if rabbitmq is supervised, set its priority higher 
; so it starts first 
priority=998 

aber als ich versuchte, die Supervisor wie supervisorctl reread und supervisorctl update i wurde die Botschaft vonzu aktualisieren

celery       FATAL  Exited too quickly (process log may have details) 

Also ging ich zu worker.log Datei und die Fehlermeldung wie unten

Running a worker with superuser privileges when the 
worker accepts messages serialized with pickle is a very bad idea! 

If you really want to continue then you have to set the C_FORCE_ROOT 
environment variable (but please think about this before you do). 

User information: uid=0 euid=0 gid=0 egid=0 

war es so, warum gesehen beschwerte sich über C_FORCE_ROOT obwohl wir es als Umgebungsvariable innerhalb Supervisor conf Datei gesetzt hatte? Was mache ich falsch in der obigen Conf-Datei?

+3

Laufen Sie nicht als root - es sollte nicht notwendig sein. (Verwenden Sie dies mit Django - laufen Sie als der gleiche Benutzer wie dort.) –

+0

yeah ok, wenn ich die Zeile 'environment = HOME ="/root ", USER =" root "entfernte' es funktionierte gut –

+0

Ich hatte das Problem mit AWS Elasticbeanstalk, mit user = ec2-user behoben es für mich –

Antwort

2

Sie benötigen Sellerie mit einem nicht Superuser-Account laufen, entfernen Sie Zeilen aus der Config folgende:

user=root 
environment=C_FORCE_ROOT="yes" 
environment=HOME="/root",USER="root" 

und die folgenden Zeilen in der Config hinzuzufügen, nehme ich an, dass Sie django als nicht verwenden Super-User und developers als Benutzergruppe:

user=django 
group=developers 

Beachten Sie, dass Subprozesse die Umgebungsvariablen des Shell erben verwendet superv zu starten isord außer den hier überschriebenen und innerhalb der Programmumgebung Option. Siehe supervisord documents.

So Bitte beachten Sie, dass, wenn Sie die Umgebungsvariablen über supervisor Konfigurationsdateien ändern, Änderungen werden nicht gelten von supervisorctl reread und supervisorctl reload läuft. Sie sollten durch folgenden Befehl ein Supervisor von Anfang an laufen:

supervisord -c /path/to/config/file.conf 
2

ich hatte das gleiche Problem, so dass ich hinzugefügt

environment=C_FORCE_ROOT="yes" 

in meinem Programm Config, aber es hat nicht funktioniert so habe ich

environment=C_FORCE_ROOT="true" 

es funktioniert

+0

funktioniert wie ein Charme! Vielen Dank! –

+0

^Unsichere Abhilfe, keine Lösung. – Pieter

+0

hat diesen Export versucht C_FORCE_ROOT = 'true'. Auch dies wurde zu bashrc hinzugefügt. Selbst dann funktioniert es nicht – Ritesh

1

Von this other thread o n Stapelüberlauf. Ich habe die folgenden Einstellungen hinzugefügt und es hat für mich funktioniert.

app.conf.update(
    CELERY_ACCEPT_CONTENT = ['json'], 
    CELERY_TASK_SERIALIZER = 'json', 
    CELERY_RESULT_SERIALIZER = 'json', 
) 
Verwandte Themen