`pwd -P` 阻止 bash 脚本在 Supervisord 中运行

`pwd -P` 阻止 bash 脚本在 Supervisord 中运行

我正在运行supervisord来执行gunicorn。我的问题是,当我的脚本包含CURR_DIR=`pwd -P`并通过supervisord运行该脚本时,它会停止该过程。我的脚本位于/var/www/conf,我希望在运行脚本时返回`pwd P` /var/www/conf。我尝试了PWD,但也没有返回/var/www/conf。当我在supervisord之外运行脚本时,`pwd -P`可以正常工作。

但是如果我对 CURR_DIR=/some/dir 进行硬编码,那么 Supervisord 运行脚本就没有问题。

这是我的脚本

#!/bin/bash

NAME=myproj 
GUNICORN_EXEC=/home/user/.virtualenvs/tscoop/bin/gunicorn
CURRENT_DIR=`pwd -P`      # does not work: causes "STOPPED" error in supervisord
CURRENT_DIR=/var/www/conf # works ok

export GUNICORN_CONF=${CURRENT_DIR}/gunicorn.conf

echo "Starting $NAME"

exec $GUNICORN_EXEC -c $GUNICORN_CONF

exit 0

这是我从supervisorctl shell得到的错误消息:

supervisor> status
myscript                            STOPPED    Aug 27 09:57 PM

我怎样才能使运行supervisord 能够运行上述脚本?

答案1

你不能做你想做的事,因为返回的值密码不能保证如您所期望的那样。


脚本的位置不是它的工作目录

$cat test
#!/bin/bash
pwd

$ ./test
/home/iain

$ cd /tmp
$/home/iain/test
/tmp

看到了吗?pwd 返回了我用来调用 test 命令的 shell 的当前目录。这就是你所发生的事情,你看到的是从supervisord 继承的值。

如果你读过丹尼斯的文档链接到它提供了有关如何解决问题的有用信息。

相关内容