该脚本旨在替代手动启停tomcat,支持单/多实例linux管理,需正确配置java_home、目录权限,并通过systemd服务化实现自动重启与日志整合。

明确脚本目标和运行环境
系统管理脚本的核心是替代手动执行 startup.sh 和 shutdown.sh,实现对单个或多个 Tomcat 实例的可控启停。它必须适配 Linux 系统,依赖已正确配置的 JAVA_HOME,且运行用户(如 tomcat)需对实例目录有读写权限。不建议用 root 直接运行,应通过 systemd 或普通受限用户调用。
编写基础启停脚本(单实例)
创建可执行脚本 /opt/tomcat/bin/manage.sh,内容精简实用:
- 开头声明解释器:#!/bin/bash
- 定义关键路径:TOMCAT_HOME="/opt/tomcat"、JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk"
- 导出环境变量:export JAVA_HOME TOMCAT_HOME
- 根据传入参数判断动作:case "$1" in start|stop|restart)
- 启动时执行:$TOMCAT_HOME/bin/startup.sh > /dev/null 2>&1
- 停止时执行:$TOMCAT_HOME/bin/shutdown.sh > /dev/null 2>&1
- 添加简单状态检查:用 ps aux | grep catalina.base= 确认进程是否存在
升级为多实例统一管理脚本
当存在多个端口实例(如 8080、8081、8082)时,脚本需支持按端口操作。参考 CSDN 提供的成熟结构:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 用 declare -A INSTANCES 定义映射关系:(["8080"]="instance-8080" ["8081"]="instance-8081")
- 每个实例独占目录:/opt/tomcat-instances/instance-8080,含完整 bin/conf/webapps
- 启动逻辑改为:进入对应实例 bin 目录,执行 ./catalina.sh start -Dcatalina.base=/path/to/instance
- PID 管理更可靠:写入 tomcat.pid 文件,避免仅靠 grep 进程名误判
- 加入日志函数(log_info/log_error)和颜色提示,提升运维可读性
对接 systemd 实现服务化管理
Linux 生产环境推荐将脚本纳入 systemd,获得自动重启、依赖管理、日志整合等能力:
- 创建 /etc/systemd/system/tomcat@.service(带实例参数的模板单元)
- 在 Unit 段声明 Wants=network.target,确保网络就绪
- Service 段中:Type=forking,PIDFile=/opt/tomcat-instances/%i/tomcat.pid
- ExecStart 调用你的管理脚本:/opt/tomcat-manager.sh start %i
- 启用服务:systemctl daemon-reload && systemctl enable tomcat@8080
- 此后可用:systemctl start tomcat@8080 或 journalctl -u tomcat@8080 -f
不复杂但容易忽略的是权限与环境隔离。脚本里硬编码的 JAVA_HOME 必须和 systemd 服务中 conf 文件定义的一致;实例目录属主必须是运行用户(如 tomcat),否则 catalina.sh 会因无法写 work/logs 目录而静默失败。










