首先我有很多Django实例的设置和运行这样.
在每个项目中,我都有一个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与服务app_name启动应用程序启动,然后停止.它甚至不写入日志文件.
这是/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
那么这里有什么问题?因为从命令行运行的原因,而是做起来不起作用.我不知道在哪里看错了什么?
最佳答案
嗯,我想出来了如果有人遇到这样的事情…
它基本上缺乏关于shell脚本的知识.
在注释掉每一行o脚本文件后,我发现了以下行的问题: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脚本