부팅시 실행되는 서비스가 있으며 해당 서비스에서 일부 환경 변수를 내보내는 백그라운드에서 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
나는 또한 발견 이 흥미로운 보았다 어떤을하지만 정말 내 경우에서 이동하지 않았다.
답변
변수를 수집하는 스크립트를 넣을 수 있습니다. /etc/profile.d/
예:
/etc/profile.d/somescript.sh
#!/bin/bash
TEST=$(cat /var/somefile)
export $TEST
/etc/profile
에서 스크립트를 실행하는 호출을 수행 /etc/profile.d/
하며 이는 루트를 포함하여 시스템의 모든 사용자에게 적용됩니다.
답변
프로세스가 다른 기존 프로세스의 환경에 영향을 줄 수있는 방법은 없습니다. 프로세스는 자식 프로세스의 환경에만 영향을줍니다.
따라서 이러한 환경 변수는 필요한 응용 프로그램의 조상에서 설정해야합니다. 서비스가 환경 설정 bash 스크립트와 응용 프로그램을 개별적으로 호출하도록하는 대신 서비스가 환경 변수를 설정 한 다음 응용 프로그램을 시작하는 bash 스크립트를 호출하게하십시오.
#!/bin/bash
. /path/to/environment/variable/setter.bash
exec /path/to/application