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 "\b$i"
       fi
      
       sleep 1
   else
      echo -e "\n $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 「軟件老王」,如果覺得還可以的話,關注下唄,后續更新秒知!歡迎討論區、同名公眾號留言交流!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM