Mam usługę, która działa podczas rozruchu, i w tej usłudze wywołuje skrypt bash w tle, który eksportuje niektóre zmienne środowiskowe. Problem, który mam, polega na tym, że te zmienne środowiskowe nie są wysyłane do elementu nadrzędnego procesu w tle, więc gdy tylko skrypt zakończy wykonywanie, znikają.
Ponadto po uruchomieniu skryptu usługa wywołuje inny skrypt uruchamiający aplikację, którą mam. Ta aplikacja potrzebuje dostępu do tych zmiennych środowiskowych.
System RHEL, na którym go uruchamiam, nie powinien być nigdy zalogowany przez użytkownika, uruchamia się tylko i uruchamia aplikację. Wiem, że zmienne środowiskowe dla procesu / powłoki nadrzędnej tak naprawdę nie mogą być ustawione przez powłokę procesu potomnego w tle.
Potrzebuję sposobu, aby to zrobić za pomocą skryptu wywoływanego przez moją usługę (choć niekoniecznie w tle), a nie poprzez dodawanie ich do mojej usługi (która nie działała dla mnie) i nie poprzez przechowywanie ich w /etc/environment
lub .profile
lub cokolwiek takiego.
W mojej usłudze próbowałem dodać zmienne środowiskowe (ale nie to, co chcę zrobić):
export TEST=192.168.1.1
Próbowałem też tego w mojej usłudze:
TEST=192.168.1.1
export TEST=${TEST}
Próbowałem zmienić sposób, w jaki moja usługa wywołuje skrypt bash:
/bin/asdf/script &
Próbowałem również pozyskać skrypt, aby działał w tej samej powłoce (którą otrzymałem z tego ):
. ./bin/asdf/script
#I'm very confused why this didn't work
Znalazłem też to, co wyglądało interesująco, ale tak naprawdę nie ułożyło się w moim przypadku.
źródło
Proces nie ma wpływu na środowisko innego istniejącego procesu. Procesy wpływają tylko na środowisko ich procesów potomnych.
Musisz więc ustawić te zmienne środowiskowe w przodku aplikacji, która ich potrzebuje. Zamiast oddzielnego wywoływania przez usługę skryptu bash konfigurującego środowisko i aplikacji, usługa powinna wywoływać skrypt bash, który ustawia zmienne środowiskowe, a następnie uruchamia aplikację.
źródło