项目中使用到tomcat,在配置logback时,使用了参数${catalina.home},但是我本机并没有设置该环境变量。登录到服务器去看了下,也没有设置。于是,猜测是tomcat在启动时,对基本环境变量进行了配置。以下是我的一些理解:
1)一般启动tomcat都是执行:./startup.sh 命令。因此,首先从startup.sh这里出发:
# resolve links - $0 may be a softlink
PRG="$0"
while [ -h "$PRG" ] ; do #判断是否为软连接,如果是,则找出真实的文件路径
ls=`ls -ld "$PRG"` # 如果为软链接,输出中含有 link -> source 的字串
link=`expr "$ls" : '.*-> \(.*\)$'` # 模式匹配出源文件的路径
if expr "$link" : '/.*' > /dev/null; then # 匹配 /.*,这里expr会输出匹配个数,如果不为0,说明$link包含目录
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link" # 当不包含目录,说明软链接和源文件在同一目录
fi
done
PRGDIR=`dirname "$PRG"`
EXECUTABLE=catalina.sh # 设置将要执行的命令
if $os400; then # 这里判断EXECUTABLE指向的命令是否存在
……
eval
else
if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then
……
fi
fi
exec "$PRGDIR"/"$EXECUTABLE" start "$@" # 执行EXECUTABLE指向的命令
2)启动指令会执行catalina.sh,影响到catalina.home的部分如下:
# 这里同样会判断软连接,过程与startup.sh中相同 ,因此,这里
# 如果没有设置CATALINA_HOME,则将PRGDIR中的目录地址赋值给CATALINA_HOME
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
# 之后,在经过判断之后,下边有一句,如下,给catalina.home赋值:
-Dcatalina.home="$CATALINA_HOME" \