Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gunicorn和Django与Upstart和Nginx_Django_Nginx_Virtualenv_Gunicorn_Upstart - Fatal编程技术网

Gunicorn和Django与Upstart和Nginx

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

首先,我有许多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.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所困扰