![스크립트를 통해 시작 시 전역 환경 변수를 설정하고 로그인 전에 실행되는 응용 프로그램에서 이를 사용할 수 있도록 하려면 어떻게 해야 합니까?](https://linux55.com/image/19351/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%8B%9C%EC%9E%91%20%EC%8B%9C%20%EC%A0%84%EC%97%AD%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EA%B3%A0%20%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%EC%A0%84%EC%97%90%20%EC%8B%A4%ED%96%89%EB%90%98%EB%8A%94%20%EC%9D%91%EC%9A%A9%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%97%90%EC%84%9C%20%EC%9D%B4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8F%84%EB%A1%9D%20%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
시작 시 실행되는 서비스가 있고 서비스에서 백그라운드에서 일부 환경 변수를 내보내는 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
나도 찾았어이것이것은 흥미로웠지만 내 경우에는 실제로 작동하지 않았습니다.
답변1
변수를 수집하는 스크립트를 배치해 볼 수 있습니다./etc/profile.d/
예:
/etc/profile.d/somescript.sh
#!/bin/bash
TEST=$(cat /var/somefile)
export $TEST
/etc/profile
Execute는 모든 스크립트에 대한 호출을 실행하며 /etc/profile.d/
이는 루트를 포함하여 시스템의 모든 사용자에게 적용됩니다.
답변2
프로세스는 다른 기존 프로세스의 환경에 영향을 미칠 수 없습니다. 프로세스는 하위 프로세스의 환경에만 영향을 미칩니다.
따라서 이러한 환경 변수를 필요로 하는 애플리케이션의 상위 항목에서 이러한 환경 변수를 설정해야 합니다. 서비스에서 bash 스크립트를 호출하여 환경 변수를 설정한 다음 애플리케이션을 시작하도록 하는 대신, 서비스에서 환경 설정 bash 스크립트와 애플리케이션을 별도로 호출하도록 하세요.
#!/bin/bash
. /path/to/environment/variable/setter.bash
exec /path/to/application