在Linux系统中,Tomcat作为常用的Java Web应用服务器,其重启操作是日常运维中频繁执行的任务,掌握正确的重启命令及流程,不仅能确保服务高效恢复,还能避免因操作不当导致的服务中断或数据异常,本文将详细解析Linux环境下Tomcat的重启命令,涵盖基础操作、进阶技巧及常见问题处理,并结合表格对比不同场景下的命令适用性,最后通过FAQs补充实用知识。

Tomcat重启的基础命令与流程
Tomcat的重启通常分为“停止-启动”两步,也可通过脚本实现一键重启,基础操作需依赖Tomcat的安装目录结构,假设Tomcat安装在/usr/local/tomcat
,核心脚本位于bin
目录,具体如下:
停止Tomcat服务
Tomcat提供了多种停止方式,核心是通过shutdown.sh
脚本发送关闭信号,或直接终止进程,常用停止命令包括:
-
标准停止(推荐):
/usr/local/tomcat/bin/shutdown.sh
该命令会向Tomcat进程发送
SHUTDOWN
信号(默认端口8005),优雅停止所有线程,完成请求处理后关闭服务,执行后需等待3-5秒,可通过ps
命令确认进程是否终止:(图片来源网络,侵删)ps -ef | grep tomcat
-
强制停止(仅用于无响应时):
若shutdown.sh
无效(如进程卡死),需通过kill
命令强制终止进程:kill -9 $(ps -ef | grep tomcat | grep -v grep | awk '{print $2}')
kill -9
会直接结束进程,可能导致未保存的数据丢失,非紧急情况慎用。
启动Tomcat服务
停止成功后,执行startup.sh
脚本启动Tomcat:
/usr/local/tomcat/bin/startup.sh
启动后可通过以下方式验证服务状态:

- 检查进程:
ps -ef | grep tomcat
(应显示Java进程,如org.apache.catalina.startup.Bootstrap
); - 查看日志:
tail -f /usr/local/tomcat/logs/catalina.out
(观察启动日志,确认无报错); - 端口监听:
netstat -tuln | grep 8080
(Tomcat默认HTTP端口8080应处于LISTEN
状态)。
一键重启脚本(高效操作)
为简化操作,可编写重启脚本,例如restart_tomcat.sh
:
#!/bin/bash TOMCAT_HOME=/usr/local/tomcat echo "Stopping Tomcat..." $TOMCAT_HOME/bin/shutdown.sh sleep 5 if ps -ef | grep tomcat | grep -v grep > /dev/null; then echo "Force killing remaining Tomcat processes..." kill -9 $(ps -ef | grep tomcat | grep -v grep | awk '{print $2}') sleep 2 fi echo "Starting Tomcat..." $TOMCAT_HOME/bin/startup.sh echo "Tomcat restart completed."
赋予执行权限后(chmod +x restart_tomcat.sh
),通过./restart_tomcat.sh
即可实现一键重启。
进阶场景与命令优化
不同环境下,Tomcat重启可能涉及权限管理、日志监控、多实例部署等进阶需求,需针对性调整命令。
非root用户重启(安全规范)
生产环境中,Tomcat通常以非root用户(如tomcat
)运行,避免权限风险,此时需切换用户执行:
sudo -u tomcat /usr/local/tomcat/bin/shutdown.sh sudo -u tomcat /usr/local/tomcat/bin/startup.sh
或通过su
切换用户:
su - tomcat -c "/usr/local/tomcat/bin/shutdown.sh" su - tomcat -c "/usr/local/tomcat/bin/startup.sh"
结合日志实时监控
重启过程中实时查看日志,可快速定位问题,在启动的同时监控日志:
/usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
或使用nohup
让脚本后台运行并输出日志:
nohup /usr/local/tomcat/bin/startup.sh > /tmp/tomcat_start.log 2>&1 &
多实例Tomcat重启
若服务器部署多个Tomcat实例(通过不同端口或配置文件区分),需指定对应目录或CATALINA_BASE
:
# 实例1(端口8080) /usr/local/tomcat1/bin/shutdown.sh /usr/local/tomcat1/bin/startup.sh # 实例2(端口8081,通过CATALINA_BASE指定) CATALINA_BASE=/usr/local/tomcat2 /usr/local/tomcat2/bin/shutdown.sh CATALINA_BASE=/usr/local/tomcat2 /usr/local/tomcat2/bin/startup.sh
使用systemd管理Tomcat(CentOS 7+/Ubuntu 16+)
现代Linux发行版推荐使用systemd
管理服务,需先创建服务单元文件(如/etc/systemd/system/tomcat.service
):
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/usr/local/tomcat Environment=CATALINA_BASE=/usr/local/tomcat ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
加载服务后,可通过systemctl
命令重启:
systemctl restart tomcat systemctl status tomcat # 查看服务状态
优势:支持开机自启(systemctl enable tomcat
)、日志自动收集(journalctl -u tomcat
)、依赖管理等,适合生产环境。
不同场景下Tomcat重启命令对比
场景 | 停止命令 | 启动命令 | 特点说明 |
---|---|---|---|
标准重启 | /usr/local/tomcat/bin/shutdown.sh |
/usr/local/tomcat/bin/startup.sh |
优雅停止,推荐日常使用 |
强制停止 | kill -9 $(ps -ef | grep tomcat | grep -v grep | awk '{print $2}') |
进程强制终止,可能导致数据丢失 | |
非root用户 | sudo -u tomcat /usr/local/tomcat/bin/shutdown.sh |
sudo -u tomcat /usr/local/tomcat/bin/startup.sh |
符合安全规范,避免root权限滥用 |
systemd管理 | systemctl stop tomcat |
systemctl start tomcat |
支持服务状态管理,适合生产环境 |
多实例(指定目录) | /usr/local/tomcat2/bin/shutdown.sh |
/usr/local/tomcat2/bin/startup.sh |
针对独立实例,避免端口冲突 |
多实例(CATALINA_BASE) | CATALINA_BASE=/usr/local/tomcat2 /usr/local/tomcat2/bin/shutdown.sh |
CATALINA_BASE=/usr/local/tomcat2 /usr/local/tomcat2/bin/startup.sh |
共享Tomcat安装目录,仅修改配置路径 |
相关问答FAQs
Q1: 执行shutdown.sh
后Tomcat未停止,如何排查?
A1: 若shutdown.sh
无效,可按以下步骤排查:
- 检查端口8005状态:
netstat -tuln | grep 8005
,确认SHUTDOWN
端口是否正常监听,若被占用可能导致关闭信号无法接收; - 查看日志:
tail -f /usr/local/tomcat/logs/catalina.out
,检查是否有“Server shutdown in progress”等关闭日志,或报错信息(如端口冲突、权限不足); - 强制终止后分析原因:执行
kill -9
强制停止后,检查catalina.out
中是否有内存溢出(OOM)、线程死锁等问题,必要时调整JVM参数(如增加内存、优化垃圾回收策略)。
Q2: 使用systemd重启Tomcat后,如何确认服务是否正常?
A2: 通过以下方式全面验证服务状态:
- 查看systemd服务状态:
systemctl status tomcat
,重点关注Active: active (running)
及Main PID
信息,若有错误可点击journalctl -u tomcat
查看详细日志; - 检查端口监听:
ss -tuln | grep 8080
(HTTP端口)和ss -tuln | grep 8443
(HTTPS端口),确认端口正常监听; - 访问测试页面:浏览器访问
http://服务器IP:8080
,若显示Tomcat默认首页则服务正常; - 检查应用日志:若部署了Web应用,需进一步查看应用日志目录(如
/usr/local/tomcat/webapps/yourapp/WEB-INF/logs/
),确认应用无报错。