catalina.sh
和 startup.sh
都是 Tomcat 的核心脚本,但它们的角色和使用场景有所不同。以下是它们的主要区别 和适用场景:
1. 功能区别
脚本 | 主要用途 | 底层调用关系 |
---|---|---|
startup.sh |
一个快捷入口脚本,用于快速启动 Tomcat(后台模式)。 | 实际调用 catalina.sh start |
catalina.sh |
核心控制脚本,支持更丰富的操作(启动、停止、调试、前台运行等)。 | 直接操作 Tomcat 的 Bootstrap 类 |
2. 使用场景对比
startup.sh
-
用途 :仅用于简单启动 Tomcat(默认后台运行)。
-
特点 :
- 适合生产环境或不需要交互的场景。
- 日志默认重定向到
logs/catalina.out
。
-
示例 :
bash./startup.sh # 等同于 ./catalina.sh start
catalina.sh
-
用途 :提供完整的生命周期控制,支持更多参数。
-
常用命令 :
bash./catalina.sh run # 前台运行(日志输出到控制台,适合调试) ./catalina.sh stop # 优雅停止 ./catalina.sh debug # 启用调试模式 ./catalina.sh jpda start # 启用远程调试(默认端口 8000)
-
特点 :
- 适合开发、调试或需要精细控制的场景。
- 可结合
setenv.sh
自定义环境变量(如JAVA_OPTS
)。
3. 关键区别总结
特性 | startup.sh |
catalina.sh |
---|---|---|
功能范围 | 仅启动(后台模式) | 启动、停止、调试、前台运行等 |
日志输出 | 后台运行,日志到文件 | 支持前台运行(日志到控制台) |
调试支持 | 不支持 | 支持调试和远程调试(JPDA) |
适用场景 | 生产环境简单启动 | 开发、调试或复杂配置 |
灵活性 | 低 | 高(可自定义参数) |
4. 如何选择?
- 生产环境 :
- 如果只需简单启动,用
startup.sh
。 - 如果需要自定义 JVM 参数,建议通过
setenv.sh
配置后,仍用startup.sh
。
- 如果只需简单启动,用
- 开发/调试环境 :
- 使用
catalina.sh run
前台运行,实时查看日志。 - 需要调试时用
catalina.sh jpda start
。
- 使用
5. 底层关系
-
startup.sh
本质上是一个简化版的包装脚本,其核心逻辑直接调用catalina.sh
:bash# startup.sh 的简化逻辑 exec "$CATALINA_HOME/bin/catalina.sh" start "$@"
-
因此,
catalina.sh
是真正的核心,而startup.sh
只是它的一个快捷方式。
6. 最佳实践
-
不要直接修改
startup.sh
或catalina.sh
-
自定义配置应通过
setenv.sh
(需手动创建)实现,例如:bash# setenv.sh export JAVA_OPTS="-Xms512M -Xmx1024M -Dapp.home=/path/to/app"
-
-
多实例部署时
- 使用
CATALINA_BASE
配合catalina.sh
管理多个 Tomcat 实例。
- 使用
总结
- 简单启动 →
startup.sh
- 高级控制 →
catalina.sh
- 调试/开发 →
catalina.sh run
或catalina.sh jpda start
理解两者的区别后,可以更灵活地根据场景选择合适的脚本!