`pwd -P`, запрещающий запуск bash-скрипта в supervisord

Я управляю надзирателем, чтобы выполнить Gunicorn. Моя проблема в том, что когда мой скрипт содержит CURR_DIR=`pwd -P` и запускает скрипт через supervisord, он останавливает процесс. Мой скрипт находится в /var/www/conf и я ожидаю, что `PWD P`, чтобы вернуться /var/www/conf когда я запускаю скрипт Я пытался PWD, и это не возвращает /var/www/conf или. `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:

supervisor> status
myscript                            STOPPED    Aug 27 09:57 PM

Как я могу сделать так, чтобы я мог запустить supervisord и запустить вышеупомянутый скрипт?

1 ответ

Решение

Вы не можете делать то, что хотите, потому что значение, возвращаемое pwd, не гарантирует того, что вы ожидаете.


Расположение скрипта не в его рабочем каталоге

$cat test
#!/bin/bash
pwd

$ ./test
/home/iain

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

Увидеть? pwd возвращает текущий каталог оболочки, которую я использовал для вызова тестовой команды. Это то, что происходит с вами, вы видите значения, унаследованные от супервизора.

Если вы прочитаете документ, ссылки на него Денниса предоставят полезную информацию о том, как вы можете решить свою проблему.

Другие вопросы по тегам