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