在Linux系统中停止Tomcat需要遵循正确的操作流程,以避免数据丢失或服务异常,以下是经过验证的几种可靠方法,适用于不同部署场景:
通过Tomcat自带脚本停止(推荐首选)
这是最安全的方式,利用Tomcat内置的shutdown.sh
脚本实现平滑停止:
# 执行停止命令 ./shutdown.sh # 验证是否停止成功(观察输出) tail -f ../logs/catalina.out
关键说明:
- 脚本默认使用
8005
端口发送停止指令,若端口被占用需检查server.xml
配置 - 等待约30秒后,通过
ps -ef | grep tomcat
确认进程消失 - 出现
SEVERE: Could not contact [localhost:8005]
错误时,检查防火墙或端口冲突
使用systemd系统服务(适用于服务化部署)
若Tomcat已注册为系统服务(现代Linux发行版推荐方式):
# 停止服务 sudo systemctl stop tomcat # 查看实时状态 sudo systemctl status tomcat # 禁止开机自启(可选) sudo systemctl disable tomcat
配置示例(/etc/systemd/system/tomcat.service):
[Unit] Description=Apache Tomcat After=network.target [Service] User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk" ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=on-failure [Install] WantedBy=multi-user.target
强制终止进程(应急方案)
当常规方法失效时,按顺序执行:
# 1. 查找主进程ID ps -ef | grep '[b]ootstrap.jar' # 2. 发送SIGTERM信号(允许资源回收) sudo kill -15 <PID> # 3. 等待60秒后仍未停止,发送SIGKILL sudo kill -9 <PID> # 4. 确认进程终止 ps -p <PID> | grep tomcat
风险提示:
kill -9
可能导致事务中断或文件损坏- 强制终止后需检查
webapps
目录是否残留临时文件
验证停止状态的三种方法
- 端口检测
sudo netstat -tuln | grep 8080
(默认端口消失) - 进程树检查
pstree -p | grep -i tomcat
- 日志确认
grep 'Server shutdown' ../logs/catalina.out
常见问题排查
- 权限不足:使用
sudo
或确保用户属于tomcat
组 - 停止超时:检查
../conf/server.xml
中<Server port="8005">
配置 - 残留进程:清除
../temp/
和../work/
目录后重启 - JVM未退出:使用
jps -l
定位Java进程
最佳实践建议:
- 生产环境优先使用
systemd
管理服务- 停止前备份
../webapps/
和../conf/
目录- 高并发场景先断开负载均衡流量
- 定期清理
catalina.out
防止磁盘占满
引用说明:本文操作指南基于Apache Tomcat 9.x官方文档整理,关键参数参考Linux Systemd手册,实践环境为CentOS 7/8及Ubuntu 20.04 LTS,兼容OpenJDK 8+运行环境,强制终止方案仅限极端场景使用,常规运维应遵循优雅停止原则。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6626.html