• Java项目多版本部署及快速回滚(含完整命令)


    1. 场景描述

    java项目linux环境下快速部署,以前介绍过,今天主要结合linux的软连接,实现版本的快速切换(回滚),包含完整的start.sh与stop.sh,只需修改包名和路径即可运行,有类似需求的朋友可以参考下。

    2.解决方案

    该方案主要介绍快速部署与版本的快速切换(回滚)。

    2.1 创建文件夹

    [ruanjianlaowang@t-laowang ~]# mkdir app
    [ruanjianlaowang@t-laowang ~]# cd app
    [ruanjianlaowang@t-laowang ~]# mkdir ruanjianlaowang
    [ruanjianlaowang@t-laowang ~]# cd ruanjianlaowang
    [ruanjianlaowang@t-laowang ~]# mkdir bin
    [ruanjianlaowang@t-laowang ~]# mkdir conf
    [ruanjianlaowang@t-laowang ~]# mkdir log
    

    说明:

    (1)在 /app 目录下创建 jar包名称 相同的文件夹,其中包含 文件夹;

    (2)bin目录,存放jar包,启动脚本;

    (3)conf目录,存放配置文件;

    (4)log目录,存放日志文件;

    2.2 配置说明

    (1)bin目录,jar包使用软连接保存历史版本,便于快速回滚

    命令:

    --新建软连接
    ln -s ruanjianlaowang201912031.jar ruanjianlaowang.jar 
    
    --更新软件连接
    mv ruanjianlaowang-1.0-SNAPSHOT.jar ruanjianlaowang201912031.jar
    ln -snf ruanjianlaowang201912031.jar ruanjianlaowang.jar 
    
    ---删除软连接
    rm  -rf ruanjianlaowang.jar
    

    通过软连接的方式,当版本出现问题的时候,就可以直接通过ln -snf来快速回滚到对应的历史版本

    (2)conf文件 配置文件使用软连接保存历史版本,便于快速回滚,(1)类似。

    (3)log文件夹就不多说了,就是存在log的地方

    2.3 sh文件

    只需替换路径和包名称即可运行,配置分离的话,可将配置文件放置到conf文件夹下,假如打包已经分离了,也可不放,主要是包的快速回滚与发布。

    (1)start.sh

    #!/bin/bash
    
    INPUT_1="ruanjianlaowang"
    APP_BASE=/home/laowang/app/$INPUT_1/
    APP=${APP_BASE}bin/${INPUT_1}.jar
    LOG_DIR=${APP_BASE}log/
    cd $APP_BASE
    if ! [ -e $LOG_DIR ]; then
       mkdir $LOG_DIR
    fi
    if ! [ -e $APP ]; then
       echo "failed, $INPUT_1 not exit"
       exit 
    fi
    PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
    if [ -n "$PROC_ID" ]; then
       echo "$INPUT_1 pid ${PROC_ID} still running now , please shutdown it first!"
       exit 2
    fi
    PROP_CONFIG="${APP_BASE}conf/application"
    if [ -e ${PROP_CONFIG}.properties ]; then
       PROP_CONFIG=file:${PROP_CONFIG}.properties
       nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP --spring.config.location=${PROP_CONFIG} 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out & 
    elif [ -e ${PROP_CONFIG}.yml ]; then
       PROP_CONFIG=file:${PROP_CONFIG}.yml 
       nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP --spring.config.location=${PROP_CONFIG} 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out &
    else
       PROP_CONFIG=
       nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out &  
    fi
    cd -
    if ! [ -n ${PROP_CONFIG} ]; then
       echo "warn!!!!, use propertis file : ${PROP_CONFIG}"
    fi
    if [ "$?" = "0" ]; then
        echo "$0 ${1%/} start succeed" 
    else
        echo "$0 ${1%/} start failed"
    fi
    tail -f ${LOG_DIR}catalina.out
    

    (2)stop.sh

    #!/bin/bash
    INPUT_1="ruanjianlaowang"
    APP_BASE=/home/laowang/app/$INPUT_1/
    APP=${APP_BASE}bin/${INPUT_1}.jar
    LOG_OUT=${APP_BASE}log/catalina
    echo $APP
    if ! [ -e $APP ]
    then
       echo "failed, $INPUT_1 not exit"
       exit 1
    fi
    
    PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
    
    if [ -n "$PROC_ID" ]
    then
      kill $PROC_ID
    else
      echo "$INPUT_1 instance not found !"
      exit
    fi
    
    for i in {1..10}; do
       PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
       if [ -n "$PROC_ID" ]; then
           if [ "$i" = "1" ]; then
              echo -n "trying stop (${PROC_ID}): $i"
           else
              echo -n -e "$i"
           fi
          
           sleep 1
       else
          echo -e "
     $APP was killed($i)"
          exit;
       fi
    done;
    kill -9 "$PROC_ID"
    echo "$APP was force killed"
    
    

    (3)restart.sh

    #!/bin/bash
    ./stop.sh
    ./start.sh
    

    I’m 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!

  • 相关阅读:
    Linux 命令二
    配置文件加载
    线程 wait 等待与notify 唤醒 使用 java 代码
    maven setting.xml
    Spring Boot入门——文件上传与下载
    写入txt 、读取csv、读取txt
    Java使用HttpClient上传文件
    kafka实战
    文本去除html标签
    sprig aop事务配置
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/11987622.html
Copyright © 2020-2023  润新知