2014-03-31 9 views
5

Ich laufe Django auf Centos von Apache und mod_wsgi serviert. Ich folgte den Anweisungen, um Sellerie als Daemon auszuführen.Warum werden meine Umgebungsvariablen beim Starten von Sellerie nicht erkannt?

Ich habe diesen Init-Skript https://github.com/celery/celery/blob/3.1/extra/generic-init.d/celeryd in /etc/init.d/celeryd

und die Konfiguration in

/etc/default/celeryd 

einrichten Ich bin mit Umgebungsvariablen in meiner django settings.py-Datei, so kann ich verschiedene Konfigurationen in meiner Entwicklung nutzen und Produktionsumgebungen. Ich weiß, dass diese Umgebungsvariablen korrekt eingestellt sind, weil die App die ganze Zeit funktioniert hat. Ich denke, dass Sellerie gerade nicht die Variable erhält, die an sie oder etwas weitergegeben wird.

Ich überprüft durch Eingabe des Befehls env. Variablen zeigen sich gut.

zu starten ich gerade:

service celeryd start 

Es wird versucht, einen Fehler zu starten, aber sagen wirft, dass ich habe nicht meine Umgebungsvariablen.

Ich schrieb eine Funktion, um Umgebungsvariablen zu greifen. das ist es, was den Fehler auslöst.

Die einzige Möglichkeit, dass ein Fehler ausgelöst wird, ist, wenn die Umgebungsvariable nicht richtig eingestellt ist.

Weiß jemand, warum Sellerie die Umgebungsvariablen nicht erkennt, die ich eingestellt habe?

Antwort

1

Definiert Ihr /etc/default/celeryd, welcher Benutzer als Sellerie laufen soll?

In mein ich habe:

CELERYD_USER="celery" 
CELERYD_GROUP="celery" 

Können Sie Ihre /etc/defaults/celeryd Konfigurationsdatei schreiben?

+0

Danke für die Anregung. Ich habe den Benutzer und die Gruppe eingestellt, nachdem ich den Selleriebenutzer erstellt hatte. Habe es aber herausgefunden und eine Antwort geschrieben. –

8

Ich entdeckte gerade, dass ich nicht nur meine Umgebungsvariablen im System einstellen musste, sondern auch diese Variablen an das Skript/etc/default/celleryd übergeben musste.

Ich legte meine Variablen nur am unteren Rand der Datei/etc/default/celleryd:

export MY_SPECIAL_VARIABLE = "my production variable" 
export MY_OTHERSPECIAL_VARIABLE = "my other production variable" 
+1

Dies funktioniert jedoch nicht mit der $ PATH-Variablen, die anscheinend nach der/etc/init zurückgesetzt wird.d/sellery ruft Sellerie an – alexvicegrab

+0

Wenn Ihre Umgebungsvariable in virtualenv postactivate definiert ist, können Sie eine neue Zeile hinzufügen./{{path_to_your_virtualenv_bin}}/postctivate' bis zum Ende von '/ etc/default/selleryd' – Shihwei

2

wenn Umgebungsvariablen auf ~/.bashrc schreiben, Sie source ~/.bashrc zu /etc/init.d/celeryd zunächst hinzufügen.

0

Ich hatte das gleiche Problem mit Sellerie und Supervisor, ich hatte Supervisord ein Shell-Skript zu starten Sellerie Arbeiter und Quelle auch die Env-Variablen verwenden.

#!/bin/bash 

source ~/.profile 
CELERY_LOGFILE=/usr/local/src/imbue/application/imbue/log/celeryd.log 
CELERYD_OPTS=" --loglevel=INFO --autoscale=10,5 --concurrency=8" 
cd /usr/local/src/imbue/application/imbue/conf 
exec celery worker -n [email protected]%h -f $CELERY_LOGFILE $CELERYD_OPTS 

in ~/.profile:

export C_FORCE_ROOT="true" 
export KEY="DEADBEEF" 
Verwandte Themen