2012-06-22 13 views
10

Prima di tutto ho molte istanze di Django installate e funzionanti in questo modo.Gunicorn e Django con Upstart e Nginx

In ogni progetto che ho uno script di shell che inizia script.sh gunicorn ecc .:

#!/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 

Quando si esegue lo script da riga di comando con bash script.sh, il sito funziona perfettamente, così Nginx è impostato correttamente.

Non appena utilizzo startstart con il servizio , nome app nome avvia l'applicazione e quindi si interrompe. Non scrive nemmeno nel file di registro.

Questo è il file diapp_name.conf 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 

Allora, qual è il problema? Perché l'esecuzione dalla riga di comando funziona, ma non lo fa con upstart. E non so dove vedere cosa non va?

+0

Accidenti questo è frustrante, sono sicuro che cieco o qualcosa e non vedere il problema! – Harry

+0

Anche quando si esegue questa riga di comando fomr gunicorn_django -b $ IP: $ PORT -w $ NUM_WORKERS \ --user = $ USER --group = $ GROUP --log-level = debug --log-file = $ LOGFILE 2 >> $ LOGFILE tutto funziona. Deve essere che il upstart è il problema? – Harry

risposta

15

Beh, l'ho capito. Se qualcuno si imbattesse in qualcosa del genere ...

Fondamentalmente una mancanza di conoscenza degli script di shell che mi tratteneva.

Dopo aver commentato ogni riga del file di script ho trovato il problema con la riga: fonte ../bin/activate e tutto il resto.

Il problema era che aveva due spazi davanti e ora so che deve essere lasciato allineato fino in fondo. Ora funziona.

Ecco come ho capito:

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

ho scoperto che lo status 127 è fondamentalmente un comando che non si trova. Quindi so che il problema era in realtà nel file di script.

Ma non sono sicuro del motivo per cui bash ./script.sh potrebbe funzionare e non dirmi che c'è qualcosa che non va? Ho bisogno di leggere su script di Schell ..

+0

Inizio tutti i miei script di upstart con 'exec>/var/log/$ {UPSTART_JOB} .log 2> & 1' seguito da' set -x' - questo restituisce ogni riga eseguita in/var/log/[upstart-job] .log e ottieni una chiara idea del perché e quando qualcosa non funziona. Sono stato raggiunto da setuid non supportato su una versione precedente di upstart – jmurphyau