Назад | Перейти на главную страницу

`pwd -P` предотвращает запуск сценария bash в супервизоре

Я управляю супервайзером по казни пулеметчика. Моя проблема в том, что когда мой скрипт содержит CURR_DIR = `pwd -P` и запускает скрипт через супервизор, он ОСТАНАВЛИВАЕТ процесс. Мой сценарий находится в /var/www/conf и я ожидаю, что `pwd P` вернется /var/www/conf когда я запускаю скрипт. Я попробовал PWD, и это не возвращается /var/www/conf либо. `Pwd -P` работает, когда я запускаю сценарий вне супервизора.

Но если я жестко запрограммирую CURR_DIR = / some / dir, тогда супервизор без проблем запускает скрипт.

Вот мой сценарий

#!/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, чтобы запускать вышеуказанный скрипт?

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


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

$cat test
#!/bin/bash
pwd

$ ./test
/home/iain

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

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

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