Как перезагрузить переменные среды из сценария

Я хотел бы смочь повторно создать значение, сохраненное переменными среды в моей тестовой среде и иметь новые значения быть считанным 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 в случае, если это имеет любое значение.

-1
задан 7 August 2015 в 16:22
2 ответа

Я предполагаю, что ваш .bash_profile имеет условие вроде if [-n "$ PS1"] , что делает его эффективным только для интерактивных оболочек. Чтобы проверить это, нужно установить -x в скрипте и проверить вывод трассировки на предмет назначений.

Что касается вашего другого вопроса: обычный способ установить среду сервера - написать экспорт назначения для / etc / sysconfig / servername или / etc / default / servername (в зависимости от того, какое из них получено непосредственно из сценария init.d).

1
ответ дан 5 December 2019 в 19:51

Похоже, поиск сценариев 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 , который указывает на ошибку при неудачном подстановке глобусов.

0
ответ дан 5 December 2019 в 19:51

Теги

Похожие вопросы