2012-06-22 150 views
10

首先,我有很多Django實例安裝並像這樣運行。Gunicorn和Django與Upstart和Nginx

在每個項目中我有開始gunicorn等:

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

當運行從的bash script.sh命令行這個腳本,該網站完美的作品一script.sh shell腳本,所以Nginx設置正確。

只要我使用新貴服務app_name啓動應用程序啓動,然後就停止。它甚至不寫入日誌文件。

這是app_name.conf文件中/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 

所以這裏有什麼問題嗎?因爲從命令行運行起作用,但做起來並不普遍。我不知道在哪裏看到什麼是錯的?

+0

該死的這是令人沮喪的,即時確定我是盲目的東西,而沒有看到問題! – Harry

+0

即使運行這個命令行gunicorn_django -b $ IP:$ PORT -w $ NUM_WORKERS \ --user = $ USER --group = $ GROUP --log-level = debug --log-file = $ LOGFILE 2 >> $ LOGFILE一切正常。一定是新貴是問題嗎? – Harry

回答

15

嗯,我想通了。如果有人遇到類似這樣的事情......

它基本上缺乏關於shell腳本的知識,這些知識阻止了我。

在註釋掉腳本文件的每一行後,我發現該行有問題:source ../bin/activate以及之後的所有內容。

問題是它前面有2個空格,現在我知道它需要一直左對齊。現在它可以工作。

這是我想通了:

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

我發現狀態127基本上是找不到的命令。所以我知道問題實際上是在腳本文件中。

但我不知道爲什麼bash ./script.sh可以工作而不告訴我什麼是錯的?我需要閱讀有關schell腳本..

+0

我用'exec>/var/log/$ {UPSTART_JOB} .log 2>&1'開始我所有的新貴腳本,後面跟着'set -x' - 這會將執行的每行都輸出到/ var/log/[upstart-job] .log,你會清楚地知道爲什麼以及何時失敗。我被setuid抓住了,不支持早期版本的新貴 – jmurphyau