2013-12-22 40 views
0

我使用bash脚本运行gunicorn。

[/home/flame/Projects/new_project]$ bash run_gunicorn.sh 

它运作良好:如果我从项目目录运行它_run_gunicorn.sh_

#!/bin/bash 
NAME=new_project 
DJANGODIR=/home/flame/Projects/$NAME 
SOCKFILE=/home/flame/launch/web.sock 
USER=flame        
GROUP=flame              
DJANGO_SETTINGS_MODULE=$NAME.settings 
DJANGO_WSGI_MODULE=$NAME.wsgi 

# export PWD=$DJANGODIR # still not work if I uncomment THIS LINE 

RUNDIR=$(dirname $SOCKFILE) 
test -d $RUNDIR || mkdir -p $RUNDIR 
gunicorn ${DJANGO_WSGI_MODULE}:application \ 
    --name $NAME \ 
    --workers 7 \ 
    --user=$USER --group=$GROUP \ 
    --log-level=debug \ 
    --bind=unix:$SOCKFILE 

命名。但是,如果

[~]$ bash Projects/new_project/run_gunicorn.sh 

它会引发错误:

gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3> 

我想这是一个关于当前工作目录。所以我改变之前加export PWD=$DJANGODIR gunicorn运行。但错误依然存在。

是关于一些python相关的环境变量?或者是什么问题?

+0

而不是'export PWD = ...',使用'cd“$ DJANGODIR”'。 – robertklep

回答

3

使用

export PWD=$DJANGODIR 

真正改变当前的工作目录。您可以使用set之后的命令pwd轻松地在shell中检查此内容。你将不得不包括像

cd $DJANGODIR 

到你的脚本。

+0

了解!但仍然对这两者的区别感到好奇。程序不是从shell进程的环境变量PWD开始的当前工作目录吗?或者通过其他方式? –

+0

根据bash的手册页,env变量'PWD'由shell自动设置。通过这种方式,您可以便宜地查找有关您当前的工作目录。这个env变量不是只读的,这有点奇怪。所以你可以改变它,但shell不会自动为你改变工作目录。 –

+0

如果更改脚本内的目录,则更改仅在该脚本的本地。它不会更改启动脚本的shell的目录。 – robertklep