2012-06-22 4 views
10

우선 나는 많은 Django 인스턴스를 설정하고 실행하고 있습니다. 각 프로젝트에서Gunicorn과 Django with Upstart와 Nginx

나는, bash는 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는 올바르게 설정되었습니다.

서비스 스타트 시작으로 upstart를 사용하자마자 앱이 시작한 다음 중지됩니다. 로그 파일에도 쓰지 않습니다.

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 

그래서 문제가 여기에 무엇 :

이 /etc/init/app_name.conf 에서 app_name.conf 파일은? 커맨드 라인에서 작동하기 때문에 작동하지만 원인을 알 수는 없습니다. 그리고 나는 틀린 곳을 어디에서보아야하는지 모른다.

+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

나는 모든 시작 스크립트를'exec-var/log/$ {UPSTART_JOB} .log 2> & 1'과'set -x' 다음에 시작합니다. 이것은/var/log/[upstart-job] .log 그리고 당신은 왜 무언가가 실패하는지 명확한 아이디어를 얻습니다. 나는 upstart의 이전 버전에서 지원되지 않는 setuid에 잡혔다. – jmurphyau