У меня есть служба, которая запускается при загрузке, и в этой службе она вызывает фоновый скрипт bash, который экспортирует некоторые переменные среды. У меня проблема в том, что эти переменные среды не отправляются родителю фонового процесса, поэтому, как только мой скрипт завершит выполнение, они исчезнут.
Кроме того, после запуска скрипта служба вызывает другой скрипт, который запускает приложение, которое у меня есть. Это приложение нуждается в доступе к этим переменным среды.
Система RHEL, на которой я ее запускаю, предназначена для того, чтобы пользователь никогда не входил в нее, она только загружается и запускает приложение. Я знаю, что переменные окружения для родительского процесса / оболочки на самом деле не могут быть установлены дочерней оболочкой фонового процесса.
Мне нужен способ сделать это с помощью скрипта, который вызывается моим сервисом (но не обязательно в фоновом режиме), а не путем добавления их в мой сервис (который не работал ни для меня), ни путем сохранения их в /etc/environment
или .profile
или что-нибудь в этом роде.
В моем сервисе я попытался добавить переменные окружения (но не то, что я хочу сделать):
export TEST=192.168.1.1
Я также попробовал это в моем сервисе:
TEST=192.168.1.1
export TEST=${TEST}
Я попытался изменить то, как мой сервис вызывает скрипт bash:
/bin/asdf/script &
Я также попытался получить сценарий, чтобы он работал в той же оболочке (которую я получил из этого ):
. ./bin/asdf/script
#I'm very confused why this didn't work
Я также нашел это, которое выглядело интересным, но это действительно не удавалось в моем случае.
У процесса нет возможности повлиять на среду другого существующего процесса. Процессы влияют только на среду их дочерних процессов.
Таким образом, вы должны установить эти переменные среды в предке приложения, которое нуждается в них. Вместо того, чтобы ваш сервис отдельно вызывал скрипт bash с настройками среды и приложение, пусть ваш сервис вызывает скрипт bash, который устанавливает переменные среды, а затем запускает приложение.
источник