概要
不知道大家平时在项目中是是不是用哦Tomcat部署Java项目的呢,或者说还采用原生shell命令,部署的时候将war上传到服务器,然后通过命令shutdown,startup,关闭现有程序,然后在重启的呢,在过程中,是不是很惊心动魄呢,一不小心命令写错了,就会导致线上环境出现问题。在本文中,我们将讨论使用Shell脚本简化Tomcat程序重启的方法,避免每次部署的时候,手敲命令出错等问题。本文将分别介绍传统命令方式和Shell脚本方式,并总结为什么使用脚本而不是传统的一行一行执行命令。
传统命令
先看一下,传统方式,使用手敲命令,是如何部署war的,在没有使用Shell脚本的情况下,重启Tomcat通常需要执行以下命令:
- 线上程序停止,停止Tomcat,比如项目Tomcat在/data/java/project下面
/data/java/project/bin/shutdown.sh
- 等待Tomcat完全关闭(可以手动检查日志或等待一段时间),或者手动再次杀死进程
ps -ef | grep 8080
kill -9 程序pid
- 重新启动Tomcat:
/data/java/project/bin/startup.sh
- 等待Tomcat完全启动(可以手动检查日志或等待一段时间)。
tail -f /data/java/project/all.log
这种方法的缺点是,它需要手动执行每个步骤,并且在多个服务器上执行时可能会变得繁琐。此外,每次重启时,可能需要根据不同的服务器配置和需求调整命令,而且手敲容易出错。
Shell脚本
为了简化这个过程,我们可以使用Shell脚本来自动化这些任务。以下是一个简单的Shell脚本,用于简化Tomcat程序的重启:
代码语言:bash复制#!/bin/bash
# 获取当前日期
current_date=$(date "%Y%m%d")
# 检查是否提供了自定义参数
if [ -n "$1" ]; then
current_date=$1
fi
# 备份war文件
cp /data/java/project/scheduler.war /data/java/project/scheduler_${current_date}.war
# 关闭Tomcat
sh /data/java/project/bin/shutdown.sh
# 查找进程ID
pid=$(ps -ef | grep 8080| grep -v grep | awk '{print $2}')
# 杀死进程
kill -9 $pid
# 删除应用目录
rm -fr /data/java/project5/scheduler
# 启动Tomcat
sh /data/java/project/startup.sh
这个脚本首先停止Tomcat,然后等待它完全关闭。接下来,它检查Tomcat是否已关闭,如果没有,则提示用户检查并重试。然后,脚本启动Tomcat,等待它完全启动,并检查它是否已成功启动。如果启动失败,脚本将提示用户检查日志。只要把脚本上传到服务器指定位置,然后,执行脚本既可。
执行上述shell文件,自定义参数为当前日期,可以作为备份文件的后缀。执行命令如下:
代码语言:shell复制./deploy.sh 20230601
注意的是,需要把shell文件设置为可执行文件
代码语言:bash复制chmod x deploy.sh
执行成功之后,直接通过查看日志,就可以查看项目是否启动成功
代码语言:bash复制tail -f /data/java/project5/scheduler/all.log
总结
这个其实就是我现有项目的部署情况,每次更新服务都要把一行一行复制命令执行,所以为了快速和保守起见,我自己就想到使用使用Shell脚本一键部署。简化Tomcat程序重启的好处包括自动化、可重用性、可定制性、错误处理和易于维护。相比之下,传统的一行一行执行命令需要手动操作,容易出错,且不易于维护。
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!