Я управляю супервайзером по казни пулеметчика. Моя проблема в том, что когда мой скрипт содержит 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 возвращает текущий каталог оболочки, которую я использовал для вызова тестовой команды. Вот что с вами происходит, вы видите ценности, унаследованные от супервизора.
Если вы читали документ Деннис ссылки на он предоставляет полезную информацию о том, как вы можете решить свою проблему.