Я хотел бы смочь повторно создать значение, сохраненное переменными среды в моей тестовой среде и иметь новые значения быть считанным PHP-FPM.
Я записал сценарий, который повторно создает переменные среды, пишет им в файл и перезапускает PHP-FPM
# make errors error
set -eufx -o pipefail
# Generate the env settings file
php bin/cli.php genEnvSettings dev /etc/profile.d/imagickdemos.sh
# reload the env values
set +u
source ~/.bashrc
source ~/.bash_profile
set -u
#restart PHP-FPM
/etc/init.d/php-fpm restart
Запущение этого скрипта не изменяет переменные среды, которые получает PHP-FPM.
Если я выполняю следующие команды непосредственно от CLI после выполнения вышеупомянутого сценария:
source ~/.bash_profile
/etc/init.d/php-fpm restart
Затем новые значения для переменных среды доступны PHP-FPM., т.е. это как будто source ~/.bash_profile
в сценарии не имеет никакого эффекта.
Как я могу перезагрузить переменные среды в том сценарии, вместо того, чтобы иметь необходимость выполнить перезагрузку непосредственно из командной строки? Или есть ли лучший способ заставить недавно записанный огибающий файл настроек быть взятым при перезапуске сервиса?
Я использую Centos 6.4 в случае, если это имеет любое значение.
Я предполагаю, что ваш .bash_profile имеет условие вроде if [-n "$ PS1"]
, что делает его эффективным только для интерактивных оболочек. Чтобы проверить это, нужно установить -x
в скрипте и проверить вывод трассировки на предмет назначений.
Что касается вашего другого вопроса: обычный способ установить среду сервера - написать экспорт назначения для / etc / sysconfig / servername
или / etc / default / servername
(в зависимости от того, какое из них получено непосредственно из сценария init.d).
Похоже, поиск сценариев env из сценария init.d является стандартной практикой, но на самом деле проблема, которая останавливала перезагрузку сценария env для меня, заключалась в установке - f
флаг.
В файле / etc / bashrc похоже, что он должен получать файлы независимо от того, что:
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. "$i"
else
. "$i" >/dev/null 2>&1
fi
fi
done
unset i
Но флаг -f отключает подстановку файлов. Я удалил флаг -f и вместо этого изменил его на shopt -s failglob
, который указывает на ошибку при неудачном подстановке глобусов.