【问题标题】:When executing service script, process cannot see environment variables. why?执行服务脚本时,进程看不到环境变量。为什么?
【发布时间】:2014-09-24 12:52:57
【问题描述】:

我制作了服务使用的 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 start和CATALINA_BASE设置为'/var/opt/tomcat7/base'。正确的!。这很自然。

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

【问题讨论】:

    标签: tomcat centos environment-variables init.d


    【解决方案1】:

    *nix下设置环境变量的方法,

    1. 用户特定
      修改每个用户的配置文件(在他们的主目录中找到)并设置环境变量。

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

    根据您是否希望所有用户都可以使用这些变量,您可以选择其中任何一种。

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

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2021-03-23
      相关资源
      最近更新 更多