【发布时间】: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