如何跨平台基于CATALINA变量可靠定位Tomcat webApps目录?
如何可靠定位Tomcat的webApps目录?
已知环境变量配置:
Using CATALINA_BASE: /usr/share/tomcat9 Using CATALINA_HOME: /usr/share/tomcat9
我可以解析server.xml,找到对应的Host元素并读取其appBase属性(假设值为'webApps'),但不清楚这个webApps文件夹的相对路径:Ubuntu默认安装下它是/var/lib/tomcat{version}/webApps,而Windows、Mac或Amazon Linux系统中则是CATALINA_BASE/webApps。
除了按系统分支处理(这种方式既繁琐又不可靠),有没有办法通过检查Tomcat本身来确定该目录?
可靠定位方法
通过Tomcat启动日志或配置检查命令获取
不需要复杂的系统分支判断,直接利用Tomcat自身的输出就能拿到准确路径:- 启动Tomcat时,日志会输出部署web应用的绝对路径,执行以下命令查看:
输出结果里会直接显示webApps目录的绝对路径。$CATALINA_HOME/bin/catalina.sh run 2>&1 | grep "Deploying web application directory" - 如果不想启动Tomcat,可使用配置检查命令,部分Tomcat版本会输出
appBase的解析后路径:$CATALINA_HOME/bin/catalina.sh configtest 2>&1 | grep -i appbase
- 启动Tomcat时,日志会输出部署web应用的绝对路径,执行以下命令查看:
解析
server.xml时结合Tomcat的路径规则
Tomcat对appBase的路径解析有明确规则,无需按系统硬编码:- 先找到
server.xml的准确位置:优先取$CATALINA_BASE/conf/server.xml,如果该文件不存在,再用$CATALINA_HOME/conf/server.xml。 - 读取Host元素的
appBase属性:- 若属性值是绝对路径,直接使用即可。
- 若为相对路径,默认是相对于
CATALINA_BASE的,但要注意部分系统(如Ubuntu)会通过配置文件修改实际生效的CATALINA_BASE,可通过以下命令确认真实值:
或者查看系统的Tomcat配置文件,比如Ubuntu的ps aux | grep tomcat | grep CATALINA_BASE/etc/default/tomcat9。
- 先找到
通过Tomcat进程的工作目录定位
找到Tomcat进程的当前工作目录,通常这就是实际的CATALINA_BASE,再结合appBase的相对路径就能得到webApps的绝对路径:# 获取Tomcat进程ID PID=$(ps aux | grep tomcat | grep -v grep | awk '{print $2}') # 查看进程的工作目录 ls -l /proc/$PID/cwd
内容的提问来源于stack exchange,提问作者Jesse Barnum
相关产品推荐
相关产品推荐

