Linux环境下,Tomcat自动化运维可通过进程监控与自动重启、开机自启配置、一键部署/升级三类核心场景实现,以下是具体方案及操作步骤:
进程监控是自动化运维的基础,通过脚本定期检查Tomcat进程状态及服务可用性,异常时自动重启,避免服务中断。
编写Shell脚本monitor.sh,实现以下功能:
ps -ef | grep tomcat过滤出Tomcat主进程;curl访问Tomcat默认页面(如http://localhost:8080),验证返回状态码是否为200(正常);示例代码片段:
TomcatID=$(ps -ef | grep tomcat | grep -w 'tomcat' | grep -v grep | awk '{print $2}')
StartTomcat=/opt/tomcat/bin/startup.sh
TomcatMonitorLog=/tmp/TomcatMonitor.log
Monitor() {
echo "[info] 开始监控tomcat [$(date '+%F %H:%M:%S')]">>$TomcatMonitorLog
if [ "$TomcatID" ]; then
TomcatServiceCode=$(curl -s -o /tmp/TomcatCheck.info -m 10 --connect-timeout 10 http://localhost:8080 -w %{http_code})
if [ "$TomcatServiceCode" -ne 200 ]; then
echo "[error] 服务不可用,状态码:$TomcatServiceCode,开始重启">>$TomcatMonitorLog
kill -9 $TomcatID
sleep 3
rm -rf $StartTomcat/../work/*
$StartTomcat
fi
else
echo "[error] 进程不存在,开始重启">>$TomcatMonitorLog
$StartTomcat
fi
}
Monitor
设置定时任务:通过crontab -e添加每分钟执行一次的定时任务(* * * * * /path/to/monitor.sh),实现周期性监控。
Systemd是Linux现代服务管理工具,支持自动重启、日志管理、依赖控制等高级功能,适合生产环境。
操作步骤:
/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
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always # 异常退出时自动重启
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
优势:无需额外编写监控脚本,Systemd原生支持自动重启,且可通过journalctl -u tomcat查看详细日志。
Tomcat作为核心服务,需在Linux系统重启后自动启动,避免手动操作。
适用于CentOS 6及以下版本,通过chkconfig工具管理:
/etc/init.d/tomcat,内容包含start()、stop()、restart()函数(参考搜索结果中init.d脚本模板);chmod +x /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig tomcat on
如前述“Systemd服务管理”步骤,通过systemctl enable tomcat实现开机自启,是当前主流方案。
自动化部署可减少人工复制war包、清理缓存、重启Tomcat的重复操作,提升发布效率。
编写deploy.sh脚本,实现以下功能:
/opt/tomcat/backup目录(带时间戳);webapps目录下的旧应用及缓存;webapps目录;示例代码:
#!/bin/bash
now=$(date +%Y%m%d%H%M%S)
tomcatPath=/opt/tomcat
backupPath=$tomcatPath/backup
war=$1
if [ ! -f "$war.war" ]; then
echo -e "\033[31m war包不存在:$war.war \033[0m"
exit 1
fi
# 创建备份目录
mkdir -p $backupPath
# 备份旧war包
if [ -f "$tomcatPath/webapps/$war.war" ]; then
mv $tomcatPath/webapps/$war.war $backupPath/${war}_$now.war
fi
# 清理旧应用及缓存
rm -rf $tomcatPath/webapps/$war*
rm -rf $tomcatPath/work/Catalina/localhost/$war*
# 复制新war包
cp $war.war $tomcatPath/webapps/
# 启动Tomcat并打印日志
$tomcatPath/bin/startup.sh
tail -10f $tomcatPath/logs/catalina.out
使用方法:将war包与脚本放在同一目录,执行./deploy.sh your-app即可。
对于团队协作场景,可通过Jenkins实现代码提交→编译打包→自动部署的全流程自动化:
mvn clean package编译项目);deploy.sh脚本,将生成的war包部署到Tomcat)。优势:实现“一次构建,多处部署”,减少人工干预,提升发布一致性。
通过以上方案,可实现Tomcat在Linux环境下的进程监控、自动重启、开机自启、一键部署等自动化运维需求,显著降低运维成本,提升服务稳定性。