我有一个在启动时运行的服务,在该服务中,它在后台调用导出一些环境变量的 bash 脚本。我遇到的问题是这些环境变量没有被发送到后台进程的父进程,因此一旦我的脚本执行完毕,它们就会消失。
此外,在脚本运行后,服务会调用另一个脚本来启动我拥有的应用程序。该应用程序需要访问这些环境变量。
我运行它的 RHEL 系统永远不会被用户登录,它只会启动并启动应用程序。我知道父进程/shell 的环境变量不能真的不过,可以由子后台进程 shell 设置。
我需要一种方法来通过我的服务调用的脚本(虽然不一定在后台)来完成此操作,而不是通过将它们添加到我的服务中(这对我来说不起作用),也不是将它们存储在或/etc/environment
中.profile
或类似的东西。
在我的服务中,我尝试添加环境变量(但这不是我想要做的):
export TEST=192.168.1.1
我也在我的服务中尝试过这个:
TEST=192.168.1.1
export TEST=${TEST}
我尝试更改我的服务调用 bash 脚本的方式:
/bin/asdf/script &
我还尝试获取脚本,以便它在同一个 shell 中运行(我从这):
. ./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
执行将运行 中任何脚本的调用/etc/profile.d/
,这适用于系统上的所有用户,包括 root。
答案2
一个进程无法影响另一个现有进程的环境。进程仅影响其子进程的环境。
因此,您需要在需要它们的应用程序的祖先中设置这些环境变量。让您的服务调用一个 bash 脚本来设置环境变量,然后启动应用程序,而不是让您的服务单独调用环境设置 bash 脚本和应用程序。
#!/bin/bash
. /path/to/environment/variable/setter.bash
exec /path/to/application