10

首先,我有很多 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 设置正确。

一旦我使用 upstart 和service app_name start应用程序就会启动然后停止。它甚至不写入日志文件。

这是/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

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

4

1 回答 1

15

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

基本上是缺乏关于 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 脚本的信息。

于 2012-06-26T11:00:58.393 回答