Tomcat 核心脚本:catalina.sh 和 startup.sh 的关系与区别
1. 基本关系
- startup.sh 是一个启动入口脚本,它实际上只是调用了 catalina.sh 来启动 Tomcat
- catalina.sh 是核心控制脚本,包含了 Tomcat 的完整生命周期管理功能
2. 具体区别对比
| 特性 |
startup.sh |
catalina.sh |
|---|
| 主要功能 |
简单的启动入口 |
完整的生命周期管理 |
| 命令长度 |
简短(约20行) |
复杂(约1000行) |
| 参数处理 |
基本参数传递 |
详细参数解析和处理 |
| 功能范围 |
仅启动功能 |
启动、停止、调试、版本检查等 |
3. 执行流程示例
# 当你执行 startup.sh 时:
./startup.sh → 调用 → ./catalina.sh start
# 实际上 startup.sh 的主要内容就是:
PRGDIR=$(dirname "$0")
EXECUTABLE=catalina.sh
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
4. catalina.sh 的主要功能
# 完整的管理命令
./catalina.sh start # 启动Tomcat
./catalina.sh stop # 停止Tomcat
./catalina.sh restart # 重启Tomcat
./catalina.sh configtest # 检查配置文件
./catalina.sh version # 显示版本信息
./catalina.sh debug # 调试模式启动
./catalina.sh run # 前台运行(控制台模式)
5. startup.sh 的优势
- 简化使用:用户只需记住
startup.sh 即可启动
- 一致性:保证总是以正确的方式启动
- 环境设置:继承 catalina.sh 的所有环境配置
6. 使用建议
# 生产环境推荐使用
./catalina.sh start # 后台启动
./catalina.sh stop # 优雅关闭
# 开发调试使用
./catalina.sh run # 前台运行,查看实时日志
./catalina.sh debug # 启用调试端口
# 简单启动(适合新手)
./startup.sh # 等同于 catalina.sh start
7. 源码结构示意
startup.sh (简化版)
├── 设置基本路径
├── 定位catalina.sh
└── 执行: catalina.sh start
catalina.sh (完整版)
├── 环境变量设置
├── JVM参数配置
├── Classpath设置
├── 安全策略检查
├── 命令解析(start/stop/run/debug等)
└── 实际执行Java进程
8. 关键差异点
- 运行方式:
startup.sh 始终在后台运行,catalina.sh run 在前台运行
- 日志输出:
startup.sh 输出到 catalina.out,catalina.sh run 输出到控制台
- 调试支持:只有
catalina.sh 支持调试模式
9. 实际应用场景
# 场景1:日常启动
./startup.sh # 简单方便
# 场景2:调试配置
./catalina.sh configtest # 检查server.xml配置
# 场景3:开发调试
./catalina.sh jpda start # 启用JPDA调试
# 场景4:查看信息
./catalina.sh version # 查看详细版本信息
总结
startup.sh 是一个用户友好的快捷方式,而 catalina.sh 是功能完整的管理工具。了解两者的关系有助于:
在简单场景使用 startup.sh 提高效率
在复杂场景使用 catalina.sh 的完整功能
更好地理解 Tomcat 的启动机制和生命周期管理
实际使用中,大多数情况用 startup.sh 启动即可,需要更多控制时才直接使用 catalina.sh。