2012-06-22 34 views
10

Trước hết, tôi có nhiều thiết lập trường hợp Django và chạy như thế này.Gunicorn và Django với Upstart và Nginx

Trong mỗi dự án tôi có một kịch bản shell script.sh bắt đầu gunicorn v.v .:

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

Khi chạy script này từ dòng lệnh với bash script.sh, trang web hoạt động hoàn hảo, vì vậy Nginx được thiết lập đúng.

Ngay sau khi tôi sử dụng mới nhất với service app_name bắt đầu ứng dụng bắt đầu và sau đó chỉ dừng lại. Nó thậm chí không ghi vào tệp nhật ký.

Đây là app_name.conf tập tin trong /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 

Vì vậy, vấn đề ở đây là gì? Nguyên nhân chạy từ các công việc dòng lệnh, nhưng làm việc khởi động máng thì không. Và tôi không biết nơi để xem whats sai?

+0

Điều này thật đáng thất vọng, chắc chắn là im mù hay gì đó và không thấy vấn đề! – Harry

+0

Ngay cả khi chạy dòng lệnh fomr này gunicorn_django -b $ IP: $ PORT -w $ NUM_WORKERS \ --user = $ USER --group = $ GROUP --log-level = debug --log-file = $ LOGFILE 2 >> $ LOGFILE mọi thứ hoạt động. Nó phải là mới nổi là vấn đề? – Harry

Trả lời

15

Vâng, tôi đã tìm ra. Nếu bất kỳ ai từng gặp phải điều gì đó như thế này ...

Về cơ bản, nó thiếu kiến ​​thức về các tập lệnh shell đang giữ tôi quay lại.

Sau khi nhận xét từng dòng o tệp tập lệnh tôi đã tìm thấy sự cố với dòng: nguồn ../bin/activate và tất cả sau đó.

Vấn đề là nó có 2 khoảng trống phía trước nó, và bây giờ tôi biết nó cần phải được căn chỉnh theo mọi hướng. Bây giờ nó hoạt động.

Đây là cách tôi figured it out:

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

tôi phát hiện ra rằng tình trạng 127 cơ bản là một lệnh không được tìm thấy. Vì vậy, tôi biết vấn đề là thực sự trong tập tin kịch bản.

Nhưng tôi không chắc tại sao bash ./script.sh sẽ hoạt động và không cho tôi biết điều gì sai? Tôi cần phải đọc về các kịch bản lệnh schell ..

+0

Tôi bắt đầu tất cả các kịch bản khởi động của mình với 'exec>/var/log/$ {UPSTART_JOB} .log 2> & 1' theo sau là' set -x' - kết quả đầu ra này được thực hiện cho/var/log/[upstart-job] .log và bạn có được một ý tưởng rõ ràng tại sao và khi một cái gì đó thất bại. Tôi đã bị bắt bởi setuid không được hỗ trợ trên một phiên bản cũ hơn của mới nổi – jmurphyau

Các vấn đề liên quan