2012-06-22 3 views
10

Прежде всего, у меня есть множество экземпляров Django, которые работают так.Gunicorn и Django с Upstart и Nginx

В каждом проекте у меня есть скрипт, который начинается script.sh 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 

При выполнении этого сценария из командной строки с Баш script.sh, сайт работает отлично, поэтому 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

Даже при запуске этой командной строки fomr gunicorn_django -b $ IP: $ PORT -w $ NUM_WORKERS \ --user = $ USER --group = $ GROUP --log-level = debug --log-file = $ LOGFILE 2 >> $ LOGFILE все работает. Должно быть, что выскочка - это проблема? – Harry

ответ

15

Ну, я понял. Если кто-нибудь когда-нибудь сталкивался с чем-то вроде этого ...

В основном это недостаток знаний о сценариях оболочки, которые меня удерживали.

После комментирования каждой строки файла сценария я нашел проблему с линией: источник ../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

Я запускаю все свои скрипты upstart с помощью 'exec>/var/log/$ {UPSTART_JOB} .log 2> & 1', за которым следует' set -x' - это выводит каждую строку, выполненную в/var/log/[upstart-job] .log, и вы получите четкое представление о том, почему и когда что-то не удается. Я догнал setuid, не поддерживаемый на более ранней версии выскочки – jmurphyau

Смежные вопросы