Gunicorn 和 Django 与 Upstart 和 Nginx

Posted

技术标签:

【中文标题】Gunicorn 和 Django 与 Upstart 和 Nginx【英文标题】:Gunicorn and Django with Upstart and Nginx 【发布时间】:2012-06-24 21:03:14 【问题描述】:

首先,我有很多 Django 实例像这样设置和运行。

在每个项目中,我都有一个启动 gunicorn 等的 script.sh shell 脚本:

 #!/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 设置正确。

只要我使用带有 service app_name start 的 upstart, 应用就会启动然后停止。它甚至不写入日志文件。

这是 /etc/init/app_name.conf 中的 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

那么这里的问题是什么?因为从命令行运行是可行的,但通过新贵运行却不行。而且我不知道哪里有问题?

【问题讨论】:

该死的,这令人沮丧,我确定我是瞎了还是什么,没有看到问题! 即使在运行这个 fomr 命令行 gunicorn_django -b $IP:$P​​ORT -w $NUM_WORKERS \ --user=$USER --group=$GROUP --log-level=debug --log -file=$LOGFILE 2>>$LOGFILE 一切正常。一定是暴发户有问题? 【参考方案1】:

好吧,我想通了。如果有人遇到这样的事情......

基本上是我缺乏关于 shell 脚本的知识。

在注释掉脚本文件的每一行后,我发现以下行有问题:source ../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 脚本的信息..

【讨论】:

我以exec >/var/log/$UPSTART_JOB.log 2>&1 后跟set -x 开始我所有的新贵脚本 - 这会将执行的每一行输出到 /var/log/[upstart-job].log 并且您会清楚地知道为什么和当某事失败时。我被早期版本的暴发户不支持的 setuid 所困扰

以上是关于Gunicorn 和 Django 与 Upstart 和 Nginx的主要内容,如果未能解决你的问题,请参考以下文章

使用 Traefik 时如何使用 Nginx 和 Django Gunicorn 提供静态内容

gunicorn模块(django与nginx整合)

Django应用程序中的空REMOTE_ADDR值,当使用nginx作为反向代理与gunicorn

Nginx Django 和 Gunicorn。 Gunicorn 袜子文件丢失?

https://example.com/admin 在 Django Nginx 和 gunicorn 中重定向到 https://admin

使用 gunicorn 时如何设置 django 测试服务器?