执行服务脚本时,进程无法查看环境变量。为什么?

时间:2014-08-01 10:28:10

标签: tomcat centos environment-variables init.d

我制作了服务使用的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',tomcat start和CATALINA_BASE设置为' / var / opt / tomcat7 / base'时,以root身份登录。对!。这很自然。

但是当我键入命令' service tomcat start',tomcat start但是没有设置CATALINA_BASE时(如果没有设置CATALINA_BASE,CATALINA_BASE与CATALINA_HOME相同),则以另一个用户(tomcat)身份登录。所以,当我写行' echo $ CATALINA_BASE'在' catalina.sh'的中间,它打印为空白(表示未设置变量)。我不知道为什么catalina.sh看不到环境变量&CATALINA_BASE'以非root用户身份登录并按服务启动init.d脚本时。 ' CATALINA_BASE'环境变量显然是设置!!

1 个答案:

答案 0 :(得分:0)

在* nix,

下设置环境变量的方法
  1. 用户专用
    修改每个用户的配置文件(在其主目录中找到)并设置环境变量。

  2. <强>全球
    编辑文件:/etc/profile并添加这些变量。

  3. 您可以根据您是否希望所有用户都可以使用这些变量来执行任一操作。

    注意:
    完成更改后,断开所有终端会话并重新连接,以便可以使用更新的变量。