自动更新jar应用的脚本(随手笔记给将来的自己看)

背景:

        因服务上部署10-20个java应用,频繁更新应用容易损坏女朋友,特勉勉强强编写一个自动更新脚本。(还需完善)

可参考写法,部分还需优化

#!/bin/bash
set -o pipefail 

declare -r BAK_TIME=$(date +%y%m%d)

#升级文件上传minio桶中,定义minio upgrade桶的路径
declare -r MINIO_PID=$(pgrep minio)
declare -r SRC_PATH="$(ps -ef | grep $MINIO_PID | grep -v "grep" |awk '{print $NF}')/upgrade"

#定义了部署的jar包
SERVICE=("A.jar" "B.jar" "C.jar")

#定义了前端文件位置,待优化
declare -r FRONTNM="web.zip"
declare -r FRONT_PATH="/data/"

#定义数组,存储minio桶中更新的文件
global_svcs=()

#创建检查服务的函数
function check_service() {
	local SERVICES_NAME=$1
	if ps -ef | grep "SERVICES_NAME" | grep -v "grep" |awk 'NR==1{print $2}' >/dev/null ;then
		echo "$SERVICES_NAME 服务正在运行" && sleep 1
		return 0
	else
		echo "$SERVICES_NAME 服务未运行,脚本将退出" && sleep 1
		exit 1 
		return 1
	fi
}
#创建函数
function check_upgrade_service() {
	local SERVICES_NAME=$1
	if [ -f $SRC_PATH/$SERVICES_NAME];then
		global_svcs+=("$SERVICES_NAME")
		return 0
	fi
}
#创建升级服务的函数
function upgrade_service() {
	local SERVICES_NAME=$1
	local PID=$(ps -ef | grep "SERVICES_NAME" | grep -v "grep" |awk 'NR==1{print $2}')
        if [ -f $SRC_PATH/$SERVICES_NAME ];then 
		echo "备份 $SERVICES_NAME 应用包" && sleep 3
		cd /proc/$PID/cwd
		mv $(grep . -l *.jar) ./$(grep . -l *.jar)-$BAK_TIME
		echo "停止运行 $SERVICES_NAME" && sleep 3
		kill -9 $PID
		echo "" > nohup.out
		mv $SRC_PATH/$SERVICES_NAME .
		nohup java -Xmx4g -Xms4g -jar A.jar &
		sleep 3
		return 0
	else 
		echo "程序存在问题,退出当前脚本" && sleep 2
		return 1
	fi	
}

#创建升级服务的函数
function upgrade_front_service() {
	
	if [ -f $SRC_PATH/$SERVICES_NAME ];then 
		echo "正在替换前端文件,备份旧包" && sleep 2 
		cd $FRONT_PATH
		mv -f web ./web-$BAK_TIME
		mv $SRC_PATH/$FRONTNM .
		unzip $FRONT_PATH > /dev/null
		echo "前端升级完成" && sleep 2
	else
		echo "前端无需升级" && sleep 2
	fi
}


#调用函数--检测服务运行情况
echo "检测服务运行情况"
for service in "${SERVICE[@]}";do
	check_service "$service"
done


#调用函数--前端升级
upgrade_front_service


#调用函数--检查升级文件

for service in "${SERVICE[@]}";do
	check_upgrade_service "$service"
done
if [ "$(ls -A "$SRC_PATH")" ];then
    echo "检测此次升级包含的后端文件 ${global_svcs[@]}"
else
    echo "检测此次升级不涉及后端文件"
    exit 1
fi

#调用函数--后端升级
for service in "${global_svcs[@]}";do
	upgrade_service "$service"
done

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值