#!/bin/bash
CURR_DIR=$(pwd)
#获取分发到节点的包名
PACKAGE_NAME=$(find . -name "*.jar"|awk -F'/' '{print $NF}')
echo "即将部署$PACKAGE_NAME"
#查看部署前部署路径下的内容
ls ${SERVICE_PATH} -l
#停服务
stop_service(){
echo "准备停服"
isServerExist=$(ps -ef|grep ${PACKAGE_NAME}|grep -v grep|awk '{print $2}'|wc -l)
SERVICE_PID=$(ps -ef|grep $PACKAGE_NAME|grep -v grep|awk '{print $2}')
if [ "$isServerExist" = "0" ]; then
echo "${SERVICE_NAME}进程不存在!"
elif [ "$isServerExist" -ge 1 ]; then
echo "正在停止 ${SERVICE_NAME}"
cd ${SERVICE_PATH}
kill -9 ${SERVICE_PID}
A=`echo $?`
if [ $A == 0 ];then
echo "${SERVICE_NAME} 停服成功"
sleep 20
else
echo "${SERVICE_NAME} 停服失败"
exit 1
fi
else
echo "${SERVICE_NAME}存在多个进程$SERVICE_PID,请检查"
exit 1
fi
}
#备份原文件
backup_service() {
echo "开始执行备份操作"
if [ ! -d $BACKUP_PATH/history/ ];then
mkdir -p $BACKUP_PATH/history/
fi
echo "如果backup中存在前一次备份,将前一次备份移动到history中..."
if [ -d $BACKUP_PATH/${SERVICE_NAME}* ];then
/bin/mv $BACKUP_PATH/${SERVICE_NAME}* $BACKUP_PATH/history/
A=`echo $?`
if [ $A == 0 ];then
echo "${SERVICE_NAME} 前一次备份移动成功"
else
echo "${SERVICE_NAME} 前一次备份移动失败"
exit 2
fi
else
echo "不存在前一次备份,不处理"
fi
echo -e "备份本次上线前部署目录中的内容..."
if [ -f "${SERVICE_PATH}/$PACKAGE_NAME" ]; then
mkdir -p $BACKUP_PATH/${SERVICE_NAME}.`date +%y%m%d_%H%M%S`
cd ${SERVICE_PATH}
/bin/mv ${SERVICE_PATH}/${PACKAGE_NAME} $BACKUP_PATH/${SERVICE_NAME}*/
B=`echo $?`
if [ $B == 0 ];then
echo "${SERVICE_NAME} 本次上线前数据备份成功"
else
echo "${SERVICE_NAME} 本次上线前数据备份失败"
exit 2
fi
else
echo "部署路径${SERVICE_PATH}中不存在$PACKAGE_NAME,不做备份"
fi
}
#部署方法
deploy_service() {
cd $CURR_DIR
pwd
echo "开始传输版本包"
cp -r ${PACKAGE_NAME} ${SERVICE_PATH}/
sleep 2
echo "开始启动,请等待~"
cd ${SERVICE_PATH}
nohup java -jar ${PACKAGE_NAME} >>./nohup.out 2>&1 &
sleep 30
isServerExist=$(ps -ef|grep $PACKAGE_NAME|grep -v grep|awk '{print $2}'|wc -l)
if [ "$isServerExist" == "1" ]; then
echo "${SERVICE_NAME} 服务启动成功!"
else
echo "${SERVICE_NAME}进程数$isServerExist,服务启动失败!"
exit 1
fi
}
#部署前的一些检查:部署目录、部分目录是否赋值、是否存在
echo "确认部署目录存在"
if [ ! ${SERVICE_PATH} ];then
echo "SERVICE_PATH此参数未设置,请检查!"
exit 1
elif [ ! ${BACKUP_PATH} ];then
echo "BACKUP_PATH此参数未设置,请检查!"
exit 1
elif [ ! -d ${SERVICE_PATH} ];then
echo "部署目录不存在,初次部署,自动创建该目录!"
mkdir -p ${SERVICE_PATH}
deploy_service
else
stop_service
backup_service
deploy_service
fi
jar包部署脚本样例
最新推荐文章于 2024-08-15 10:43:44 发布
这是一个自动化部署脚本,主要功能包括检查服务状态、停止服务、备份原有文件、部署新版本及启动服务。脚本首先获取当前目录下的jar包名,然后检查服务路径,停止服务进程,并进行备份操作。最后,将新版本的jar包复制到服务路径并启动服务。整个过程确保了服务的平滑升级。
摘要由CSDN通过智能技术生成