tomcat - 执行服务脚本时,进程看不到环境变量。为什么?

标签 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”时以 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下设置环境变量的方法,

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

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

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

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

关于tomcat - 执行服务脚本时,进程看不到环境变量。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078190/

相关文章:

Java 7 update 11 在 IE8 上使用 Apache Tomcat 6.0.36 破坏了 webb 应用程序

java.lang.AbstractMethodError : org. apache.xerces.jaxp.DocumentBuilderFactoryImpl 不继承抽象 javax.xml.parsers.DocumentBuilderFactory

centos - 找不到匹配项 : centos-release-openstack-stein

python - 使用 app.yaml 在 GAE 中安全地存储环境变量

javascript - 使用 JOI 获取环境变量

java - Tomcat的字符编码问题

xml - 如何为非标准 war 文件位置配置 Tomcat7 `server.xml`

ssl - 使用 SSL 启动 Docker

tomcat - OpenMeeting 录制功能故障

python - Django 报错邮件 : env vars leak info