2012-06-22 12 views
10

Zuerst habe ich viele Django-Instanzen eingerichtet und läuft so.Gunicorn und Django mit Upstart und Nginx

In jedem Projekt habe ich einen script.sh Shell-Skript, die gunicorn etc .: beginnt

#!/bin/bash 
    set -e 
    LOGFILE=/var/log/gunicorn/app_name.log 
    LOGDIR=$(dirname $LOGFILE) 
    NUM_WORKERS=3 
    # user/group to run as 
    USER=root 
    GROUP=root 
    PORT=8060 
    IP=127.0.0.1 
    cd /var/www/webapps/app_name 
    source ../bin/activate 
    test -d $LOGDIR || mkdir -p $LOGDIR 
    exec /var/www/webapps/bin/gunicorn_django -b $IP:$PORT -w $NUM_WORKERS \ 
    --user=$USER --group=$GROUP --log-level=debug --log-file=$LOGFILE 2>>$LOGFILE 

Wenn dieses Skript von der Kommandozeile mit bash script.sh läuft, die Website einwandfrei funktioniert, also Nginx ist richtig eingerichtet.

Sobald ich Emporkömmling mit Service App_Name Start die App startet und dann nur stoppt. Es wird nicht einmal in die Protokolldatei geschrieben.

Dies ist die app_name.conf Datei in /etc/init/app_name.conf:

description "Test Django instance" 
start on runlevel [2345] 
stop on runlevel [06] 
respawn 
respawn limit 10 5 
exec /var/www/webapps/app_name/script.sh 

Also, was ist das Problem? Ursache läuft von der Befehlszeile funktioniert, aber tun Upstart nicht tun. Und ich weiß nicht, wo ich was falsch sehen kann?

+0

Verdammt das ist frustrierend, ich bin sicher blind oder etwas und nicht das Problem zu sehen! – Harry

+0

Auch wenn diese fomr-Befehlszeile ausgeführt wird gunicorn_django -b $ IP: $ PORT -w $ NUM_WORKERS \ --user = $ USER --group = $ GRUPPE --log-level = debug --log-file = $ LOGFILE 2 >> $ LOGFILE alles funktioniert. Es muss sein, dass Emporkömmling das Problem ist? – Harry

Antwort

15

Nun, ich habe es herausgefunden. Wenn irgendjemand jemals auf so etwas stoßen würde ...

Es war im Grunde ein Mangel an Wissen über Shell-Skripte, die mich zurückhielt.

Nach dem Auskommentieren jeder Zeile der Skriptdatei fand ich das Problem mit der Zeile: Quelle ../bin/activate und alles danach.

Das Problem war, dass es 2 Felder davor hatte, und jetzt weiß ich, dass es vollständig ausgerichtet sein muss. Jetzt funktioniert es.

Dies ist, wie ich es herausgefunden:

tail -f /var/log/syslog 
Jun 26 10:54:59 saturn7 init: app_name main process (3521) terminated with status 127 

Ich fand heraus, dass Status 127 im Grunde ein Befehl ist, der nicht gefunden wird. Ich weiß also, dass das Problem tatsächlich in der Skriptdatei lag.

Aber ich bin mir nicht sicher, warum bash ./script.sh funktionieren würde und mir nichts sagen, ist falsch? Ich muss über schell Skripte ..

lesen
+0

Ich starte alle meine Upstart-Skripte mit 'exec>/var/log/$ {UPSTART_JOB} .log 2> & 1' gefolgt von' set -x' - dies gibt jede Zeile aus, die nach/var/log/[upstart-job] ausgeführt wurde .log und Sie erhalten eine klare Vorstellung, warum und wann etwas fehlschlägt. Ich wurde von Setuid eingeholt, das auf einer früheren Version von Emporkömmling nicht unterstützt wurde – jmurphyau