linux中使用sh脚本部署springboot,每次自动使用最新版本jar包

#!/bin/bash
# 项目名字
APP_NAME=admin
# 环境配置文件,如application-dev.yml
PROFILE=pro
#老版本拼接jar包名,这里没用,可以字形删除
JAR_NAME=$APP_NAME\.jar
PID=$APP_NAME\.pid
#PROJ_HOME=$(pwd)
#项目路径,也是老版本直接复制过来的,这个可以根据自己情况修改
PROJ_HOME=/jars/
#export JRE_HOME=${JAVA_HOME}/jre
export JRE_HOME=/usr/local/java/jdk1.8.0_301/jre
# 这个是jar包的路径需要根据自己的情况配置
APP_HOME=$PROJ_HOME/
LOG_PATH=$APP_HOME/logs
# 创建log路径
if [ ! -d $LOG_PATH ]; then
  mkdir $LOG_PATH
fi

#动态得到jar文件名 start

function getDir() {
    for item in `ls $1`
    do
    fileName=$1"/"$item
    if [ -d $fileName ]
    then
        echo $fileName"是目录"
        #getDir $fileName
    else
        echo $fileName"不是目录"
        echoFile $fileName
    fi
    done
}

function echoFile() {
    fileName=$1
    echo ${fileName##*.}
    if [ ! ${fileName##*.} = jar ]
    then
      echo $1"不是jar包"
    else 
      echo $1"是jar包"
    fi
}


 #sh文件所在目录
    YN_BASE_PATH=$(pwd)
    #jar包存放目录
    YN_JAR_PATH="$YN_BASE_PATH/jars"
    #当前时间
    YN_NOW_TIME=$(date "+%Y-%m-%d %H:%M:%S")
    if [ ! -d $YN_JAR_PATH ]; then
        echo "[$YN_NOW_TIME]->>同级目录下不存在文件夹jars,请先创建并上传jar包文件"
    else
        YN_NOW_TIME=$(date "+%Y-%m-%d %H:%M:%S")
      echo "[$YN_NOW_TIME]->>文件夹jars已经存在,查找最新jar包并启动"
    fi

    
    #-rt 按时间正叙,-t时间倒叙,每次启动都用最新的 ,lrt是显示列表
    #jar文件路径
    YN_JAR_FILE=""
    for item in `ls $YN_JAR_PATH -t`
      do
         
         YN_FileName=$YN_JAR_PATH"/"$item
        if [ -d $YN_FileName ]; then
            echo $YN_FileName"是目录"
            #getDir $fileName
        else
            #echo $fileName "不是目录"
            #echo ${fileName##*.} 
            YN_NOW_TIME=$(date "+%Y-%m-%d %H:%M:%S")
            if [  ${YN_FileName##*.} = jar ];  then
                echo $YN_NOW_TIME"找到最新的jar包"$item
                YN_JAR_FILE=$YN_JAR_PATH"/"$item
                break
            fi
            #echoFile $fileName
        fi
         
         
      done 
       if [  $YN_JAR_FILE = "" ];  then
          echo "未找到jar包,程序将无法启动"      
       fi
      echo $YN_JAR_FILE

#动态得到jar文件名 end


# GC日志参数
GC_LOG_OPTS=" -XX:+PrintGC -XX:+PrintGCDetails -Xloggc:$LOG_PATH/gc-%t.log"
# GC收集器参数
GC_OPTS="-XX:+UseConcMarkSweepGC"
# 其他参数
OTHER_OPTS="-Dspring.profiles.active=$PROFILE"
# JVM 启动参数
JVM_OPTIONS="-server -Xms64m -Xmx64m -XX:MetaspaceSize=16m $GC_OPTS $GC_LOG_OPTS $OTHER_OPTS"
# 使用说明,用来提示输入参数
usage() {
  echo "Usage: demogc.sh [start|stop|restart|status]"
  exit 1
}
# 检查程序是否在运行
is_exist() {
  pid=$(ps -ef | grep $YN_JAR_FILE | grep -v grep | awk '{print $2}')
  #如果不存在返回1,存在返回0
  if [ -z "${pid}" ]; then
    return 1
  else
    return 0
  fi
}
# 启动方法
start() {
  is_exist
  if [ $? -eq "0" ]; then
    echo "WARN: $JAR_NAME is already running PID=${pid}"
  else
    echo "JVM_OPTIONS : "
    echo $JVM_OPTIONS | sed 's/ /\n/g '
    nohup ${JRE_HOME}/bin/java -jar $JVM_OPTIONS $YN_JAR_FILE >>$LOG_PATH/stdout.log 2>&1 &
    echo $! >$PID
    echo "INFO: start $JAR_NAME successed PID=$!"
  fi
}
# 停止方法
stop() {
  #is_exist
  pidf=$(cat $PID)
  echo "INFO: app PID = $pidf begin kill $pidf"
  kill "$pidf"
  rm -rf $PID
  sleep 2
  is_exist
  if [ $? -eq "0" ]; then
    echo "INFO: app 2 PID = ${pid} begin kill -9 ${pid}"
    kill -9 ${pid}
    sleep 2
    echo "INFO: $JAR_NAME process stopped ---"
  else
    echo "INFO: $JAR_NAME is not running ---"
  fi
}
# 输出运行状态
status() {
  is_exist
  if [ $? -eq "0" ]; then
    echo "INFO: $JAR_NAME is running PID is $pid"
  else
    echo "WARN: $JAR_NAME is not running"
  fi
}
# 重启
restart() {
  stop
  start
}

case "$1" in
"start")
  start
  ;;
"stop")
  stop
  ;;
"status")
  status
  ;;
"restart")
  restart
  ;;
*)
  usage
  ;;
esac
exit 0

一直用sh脚本启动springboot项目,可是每次跟新后都需要手动修改jar包名称或sh文件进行对应,太不方便部署了,而且对于jar包版本管理也不方便。所以在网上一顿搜罗后把sh部署脚本进行升级。实现在项目目录jars目录下存储多个jar包,自动按文件名排序取最高版本使用。

sh+systemctl部署springboot文章见:CentOS8中通过systemd(systemctl)实现springboot项目开机自动启动,使用sh脚本_yulei6的博客-CSDN博客

 由于本人初学,内容仅供参考,另外希望大家不理赐教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值