一、Tomcat 目录结构为什么要先搞清楚¶
原笔记在完成快速部署后,马上进入目录结构部分,这一点非常重要。
因为 Tomcat 后续的大多数运维操作都依赖你知道:
- 命令在哪
- 配置在哪
- 日志在哪
- 应用部署目录在哪
如果这些目录关系没搞清楚,后续排错和部署都会很低效。
二、Tomcat 常见目录各自放什么¶
原笔记把常见目录整理如下:
| 目录 | 说明 |
|---|---|
bin |
Tomcat 管理命令 |
conf |
Tomcat 配置文件 |
lib |
依赖和库文件 |
logs |
日志目录 |
webapps |
站点目录 |
work |
Java 代码运行后的工作目录 |
这里面最常用的几类目录是:
binconflogswebapps
三、bin、conf、logs 最需要关注什么¶
原笔记对几个目录里的典型内容也做了说明。
3.1 bin¶
常见脚本包括:
startup.shshutdown.shcatalina.sh
其中 catalina.sh 是核心脚本,后续很多 JVM 参数、JMX 监控、优化项都会在这里延伸。
3.2 conf¶
重点配置文件包括:
server.xmlweb.xml
后面端口、虚拟主机、访问日志、HTTPS 等配置都离不开 server.xml。
3.3 logs¶
原笔记强调了几个重要日志:
catalina.out- 按天切割的
catalina.*.log localhost_access_log.*.txt
其中最关键的排查点通常是:
startuperrorfailedexception
四、为什么建议给 Tomcat 写 systemd 配置¶
原笔记提到:
- 二进制安装的软件不像 RPM 包那样自带服务管理
- 因此更适合自己写
systemd配置来统一管理
这样做的好处是:
- 可以用
systemctl统一启停 - 能纳入系统服务管理
- 后续重启、开机自启、状态查看都更方便
五、Tomcat 的 systemd 配置该怎么写¶
原笔记先用 systemctl cat nginx 看了一个模板,再仿照写出了 Tomcat 服务文件。
示例:
[Unit]
Description=tomcat
After=network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecReload=/app/tools/tomcat/bin/shutdown.sh && /app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
配套环境文件:
JAVA_HOME=/app/tools/jdk
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin/
CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
写完之后执行:
systemctl daemon-reload
systemctl enable tomcat
这就把手工运行的 Tomcat 纳入了标准系统服务管理。
六、Java 应用为什么会分成 war 和 jar¶
原笔记把两种运行方式总结得很清楚:
| 形式 | 说明 | 场景 |
|---|---|---|
war |
放进 Java 容器中运行,比如 Tomcat | 更常见于传统 Web 应用 |
jar |
直接用 java -jar 启动,往往内置容器 |
更适合独立应用 |
也就是说:
war更依赖外部容器jar更像自带运行时环境的应用包
七、案例一:把 war 包放进 webapps¶
原笔记中的例子是 memtest.war。
只要 Tomcat 正在运行,把 war 包放到:
/app/tools/tomcat/webapps/
Tomcat 就会:
- 自动解压
- 自动部署
原笔记中可以看到:
memtest.war- 自动生成的
memtest/ work/目录里生成的编译结果
访问:
http://192.168.1.20:8080/memtest/meminfo.jsp
即可验证应用已经运行。
八、案例二:直接运行 jar 包¶
原笔记第二个案例使用的是 nginxWebUI.jar。
启动方式如下:
nohup java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI/nginxWebUI.jar --server.port=8848 --project.home=/home/nginxWebUI/ > /dev/null &
这类方式的特点是:
- 不需要额外 Tomcat
- 只要有 JDK 就能运行
- 常见于 Spring Boot 这类内置容器应用
原笔记还补充了几个参数说明,例如:
--server.port--project.home- 数据库相关参数
本质上就是让应用通过命令行参数完成端口、配置和存储目录的定制。
九、小结¶
Tomcat 运维最常见的几个基础动作,原笔记基本都覆盖到了:
- 先认识目录结构
- 把 Tomcat 纳入
systemd管理 - 理解
war和jar的区别 - 能分别跑通容器部署和
java -jar部署
对 Java 运维入门来说,这几部分掌握之后,后面再学配置、排障和集群就更有抓手了。