我制作了服务使用的 tomcat init.d 脚本,例如“service tomcat start”。 脚本是这样的。
...
CATALINA_HOME=/opt/tomcat7/default
if [ $UID -eq 0 ]
then
RUN_COMMAND="runuser -l tomcat -c"
RUN_TOMCAT_COMMAND="sh $CATALINA_HOME/bin"
else
RUN_COMMAND="sh "
RUN_TOMCAT_COMMAND="$CATALINA_HOME/bin"
fi
...
function process_startup() {
$RUN_COMMAND "$RUN_TOMCAT_COMMAND/startup.sh"
}
...
CATALINA_HOME 和 CATALINA_BASE 变量是通过制作脚本文件 '/etc/profile.d/tomcat.sh' 设置的。因此,当我在 shell 中键入命令 env 时,CATALINA_BASE 和 CATALINA_HOME 如下所示。
...
CATALINA_HOME=/opt/tomcat7/default
CATALINA_BASE=/var/opt/tomcat7/base
...
因此,当我键入命令“service tomcat start”时以 root 身份登录,tomcat 启动并且 CATALINA_BASE 设置为“/var/opt/tomcat7/base”。正确的!。这很自然。
但是当我键入命令“service tomcat start”时,以另一个用户 (tomcat) 登录,tomcat 启动但未设置 CATALINA_BASE(如果未设置 CATALINA_BASE,CATALINA_BASE 与 CATALINA_HOME 相同)。所以当我在'catalina.sh'中间写'echo $CATALINA_BASE'行时,它打印空白(意味着未设置变量)。我不知道为什么当以非 root 用户身份登录并通过服务启动 init.d 脚本时,catalina.sh 看不到环境变量“CATALINA_BASE”。 “CATALINA_BASE”环境变量显然已设置!!
最佳答案
*nix下设置环境变量的方法,
用户特定
修改每个用户的配置文件(在他们的主目录中找到)并设置环境变量。全局
编辑文件:/etc/profile
并添加这些变量。
根据您是否希望所有用户都可以使用这些变量,您可以执行任何一种操作。
注意:
进行更改后,断开所有终端 session 并重新连接,以便您可以使用更新后的变量。
关于tomcat - 执行服务脚本时,进程看不到环境变量。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078190/