【问题标题】:Gunicorn and Django with Upstart and NginxGunicorn 和 Django 与 Upstart 和 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 一切正常。一定是暴发户有问题?

标签: django nginx virtualenv gunicorn upstart


【解决方案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 所困扰
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 2018-02-16
  • 2019-05-06
  • 2015-06-02
  • 2013-03-22
  • 1970-01-01
  • 2015-04-25
相关资源
最近更新 更多