将两个shell脚本置于tomcat的bin目录下,chmod +x 为两个脚本给上可执行权限,直接用./deploy.sh或./restart.sh执行即可。
具体实现功能:
1.deploy.sh首先删除webapps目录下项目war包(tomcat会自动删除war包解压出来的文件夹)。
2.shutdown关闭tomcat,如若3s后还未关闭使用kill -9 杀死该进程。
3.将已上传到指定位置的war包部署到tomcat并通过restart.sh重启tomcat。
下面附上代码:
deploy.sh
#! /bin/sh
bin=$(cd `dirname $0`;pwd)
pid=`ps aux | grep tomcat | grep -v grep | grep -v deploy |grep ${bin} |awk '{printf $2}'`
war=/data/kmss/resource/war/jl_server.war
if [ ! -f "${war}" ]; then
echo '请部署jl_server.war包至/data/kmss/resource/war/目录下';
fi
echo "Deploy ${war##*/}..."
if [ -f "${bin}/../webapps/jl_server.war" ];then
echo "========rm jl_server.war========="
rm -rf ${bin}/../webapps/jl_server.war
fi
#关闭本项目的tomcat进程
if [ -n "${pid}" ];then
echo "==========shutdown.sh============"
${bin}/shutdown.sh
sleep 3
pid=`ps aux |grep tomcat | grep -v grep | grep -v deploy | grep ${bin} |awk '{printf $2}'`
if [ -n "${pid}" ]; then
echo "==========kill tomcat============"
kill -9 ${pid}
fi
fi
sleep 5
if [ -d "${bin}/../webapps/jl_server" ]; then
echo "==========rm jl_server==========="
rm -rf ${bin}/../webapps/jl_server
fi
#部署war包到tomcat
mv ${war} ${bin}/../webapps
echo "Restart tomcat..."
exec ${bin}/restart.sh
tomcat启动时若war包被删除,tomcat会自动删除war包解压出来的文件夹,但若在删除过程中tomcat进程被关闭则文件夹可能未来得及被删除,所以在关闭进程后确认文件夹是否被删除。
参考博文中博主使用$1实现在输入命令时 使用参数定位war包位置,因为本项目只有单个war包需要上传所以直接在脚本中固定war包位置。如有需要可参考文章链接博主博文。
restart.sh
#!/bin/sh
echo "===========restart jl tomcat=============";
bin=$(cd `dirname $0`;pwd)
pid=`ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} |awk '{printf $2}'`
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo "now time: $dat"
echo "$pid"
if [ -n "$pid" ]; then
{
echo ============shutdown.sh ================
$bin/shutdown.sh
sleep 3
pid=`ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} |awk '{printf $2}'`
if [ -n "$pid" ];then
echo ============kill tomcat=================
kill -9 $pid
fi
echo ============startup.sh =================
$bin/startup.sh
}
else
echo ============startup.sh =================
${bin}/startup.sh
fi
# $1代表在命令后输入的第一个参数
if [ "$1" == "-v" ]; then
tail -f ${bin}/../logs/catalina.out
fi
restart.sh启动使用./restart.sh用于重启tomcat,若tomcat进程原本关闭则直接启动。
在命令后加上-v 参数即可打印tomcat日志。 ./restart.sh -v
原创地址:https://blog.csdn.net/qq_38439885/article/details/79993389
另一种网上部署脚本,和上面两个独立,原创地址
#Tomcat根目录
TOMCAT_HOME="/usr/local/tomcat/apache-tomcat-9.0.0.M4"
#端口
TOMCAT_PORT=8080
#TOMCAT_PID用于检测Tomcat是否在运行
TOMCAT_PID=`lsof -n -P -t -i :${TOMCAT_PORT}`
#如果Tomcat还在运行
if [ -n "${TOMCAT_PID}" ]; then
#关闭Tomcat
${TOMCAT_HOME}/bin/shutdown.sh
#循环检查Tomcat是否关闭完成
while [ -n "${TOMCAT_PID}" ]
do
#等待1秒
sleep 1
#获取8080端口运行进程PID,如果PID为空则表示Tomcat已经关闭
TOMCAT_PID=`lsof -n -P -t -i :${TOMCAT_PORT}`
echo "正在关闭Tomcat["${TOMCAT_PORT}"]..."
done
echo "成功关闭Tomcat."
fi
warPath="${TOMCAT_HOME}/webapps/war包名称/"
warFile="${TOMCAT_HOME}/webapps/war包名称.war"
#如果文件或者文件夹存在则删除
deleteWhenExist(){
if [ -e $1 ]; then
rm -rf $1
fi
}
deleteWhenExist ${warPath}
deleteWhenExist ${warFile}
#拷贝新编译的包到Tomcat
cp 项目名称/target/war包名称.war ${TOMCAT_HOME}/webapps/
${TOMCAT_HOME}/bin/startup.sh
echo "正在启动Tomcat["${TOMCAT_PORT}"]..."
#检测Tomcat是否启动完成
while [ -z "${TOMCAT_PID}" ]
do
sleep 1
#echo "TOMCAT_PID["${TOMCAT_PID}"]"
TOMCAT_PID=`lsof -n -P -t -i :${TOMCAT_PORT}`
echo "正在启动Tomcat["${TOMCAT_PORT}"]..."
done
echo "成功启动Tomcat."