Gunicorn和Django与Upstart和Nginx
首先,我有许多Django实例是这样设置和运行的 在每个项目中,我都有一个script.sh shell脚本,用于启动gunicorn等:Gunicorn和Django与Upstart和Nginx,django,nginx,virtualenv,gunicorn,upstart,Django,Nginx,Virtualenv,Gunicorn,Upstart,首先,我有许多Django实例是这样设置和运行的 在每个项目中,我都有一个script.sh shell脚本,用于启动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
#!/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从命令行运行此脚本时,该站点工作正常,因此Nginx的设置正确。
只要我使用upstart和服务应用程序\u name启动应用程序就会启动,然后停止。它甚至不写入日志文件
这是/etc/init/app\u name.conf中的app\u 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
那么这里的问题是什么?因为从命令行运行是可行的,但通过upstart运行则不行。我不知道从哪里可以看出哪里出了问题?好吧,我想出来了。如果有人遇到这样的事情 这基本上是因为缺乏关于shell脚本的知识,这让我望而却步 在注释掉脚本文件的每一行之后,我发现了这一行的问题:source../bin/activate,以及之后的所有内容 问题是它前面有两个空格,现在我知道它需要一直左对齐。现在它起作用了 我是这样想的:
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脚本的书。该死的,这太令人沮丧了,我肯定我是瞎子或者什么的,没有看到问题!即使在运行这个fomr命令行gunicorn_django-b$IP:$PORT-w$NUM_WORKERS\--user=$user--group=$group--log level=debug--log file=$LOGFILE 2>>$LOGFILE时,一切都正常。一定是upstart出了问题?我用
exec>/var/log/${upstart\u JOB}.log 2>&1
启动所有upstart脚本,然后是set-x
-这会将执行的每一行输出到/var/log/[upstart JOB].log,这样您就可以清楚地知道失败的原因和时间。我被早期版本的upstart不支持的setuid所困扰