SpringBoot啓停腳本

由於工作需要,springboot需要脫離原有部署環境,在沒有自動部署功能的前提下,爲了防止人爲誤操作以及其他的一些原因,需要規範系統部署,但同時帶了人工操作的複雜度,因此需要通過腳本控制來降低人工成本。

目錄

1.前期準備

2.系統部署規範

3. 資源利用記錄

4.服務啓停腳本


1.前期準備

     springboot的前期工作不再贅述,環境搭建不是這裏的重點,因此Java環境等等忽略

2.系統部署規範

      既然說要腳本完成啓停,必然需要規範系統部署,規則如下

      2.1springboot結構相關
                 /                                                                                                                         --------------根目錄

                 /apps                                                                                                                 --------------部署服務目錄

                 /apps/xxx-sc(項目名稱)                                                                                --------------日誌文件目錄

                 /apps/xxx-sc(項目名稱)/logs                                                                        --------------項目日誌目錄

                 /apps/xxx-sc(項目名稱)/logs/xxx.年月日                                                      --------------項目日誌目錄    (日誌每日一切割,每50M一切割)
                 /apps/xxx-sc(項目名稱)/service.sh                                                               --------------項目啓停腳本

                 /apps/xxx-sc(項目名稱)/service/xxx-sc-aaaa(項目名稱-sc-端口號)         --------------項目日誌名稱                

                 /apps/xxx-sc(項目名稱)/tmp                                                                         --------------臨時jar                

                 /apps/xxx-sc(項目名稱)/target                                                                      --------------target

    2.2數據庫相關
                 /                                                                            --------------根目錄

                 /apps                                                                    --------------部署服務目錄

                /apps/dbconfig                                                    --------------數據庫文件目錄
                /apps/dbconfig/數據庫名字                                --------------數據庫文件目錄
3. 資源利用記錄

       由於同一個服務器可能存在多服務情況,爲了防止相互之間端口占用的影響,需要資源備案進行分配

 

項目名稱 域名 框架 環境 http端口號 Shutdown端口 AJP端口 數據庫
xxx xxx.aaa.com springboot 生產 8989     xxx
xxx-nc   springboot 內測 8988     xxx-nc
ppp   tomcat 生產 8987 8187 8287 ppp
ppp-nc   tomcat 內測 8986 8186 8286 ppp-nc
        8985      

4.服務啓停腳本

目錄名稱 目錄說明 備註
xxx-sc 項目所在目錄

xxx:項目名稱

sc:生產環境

nc:內測環境

xxx-sc-aaaa 項目名稱 aaa:端口號
service.sh springboot項目啓停腳本

啓動:service.sh start

停止:service.sh stop

重啓:service.sh restart

上線:service.sh push

回滾:service.sh rollback

狀態查詢:service.sh status

     

 

        由於shell腳本不是特別熟悉,有什麼更好的方式可以達成目標,歡迎大家指點

#!/bin/sh
## java env
#export JAVA_HOME=/usr/local/jdk/jdk1.8.0_101
#export JRE_HOME=$JAVA_HOME/jre

echo
echo "**********************環境檢測 開始**********************"
`java -version`
echo
service_path=`ls -lt ./service/ | find ./service -name "*.jar"`
echo ">>> 服務路徑地址: $service_path"
service_name=${service_path##*/}
echo ">>> 服務JAR名稱: $service_name"
tmp_path=`ls -lt ./tmp/ | find ./tmp -name "*.jar"`
echo ">>> 臨時文件路徑: "$tmp_path
tmp_name=${tmp_path##*/}
echo ">>> 臨時JAR名稱: "$tmp_name
echo "**********************環境檢測 結束**********************"
echo 
echo

API_NAME=$service_path
JAR_NAME=$service_name


#使用說明,用來提示輸入參數
usage() {
    echo "Usage: sh 執行腳本.sh [start|stop|restart|status|push|rollback]"
    exit 1
}

#檢查程序是否在運行
is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   	echo ">>> 服務 $JAR_NAME 未運行"
   	return 1
  else 
  	echo ">>> 服務 $JAR_NAME 運行中"
    return 0
  
  fi
}

#啓動方法
start(){
  echo "**********************啓動服務 開始**********************"
  is_exist
  if [ $? -eq "0" ]; then 
    echo ">>> 服務 ${JAR_NAME} 已經在運行中, PID=${pid} <<<" 
  else
    nohup java -jar $service_path >/dev/null 2>&1 &
    getPID
	    if [ $? -eq "0" ]; then
	    	echo ">>> 服務 $JAR_NAME 啓動失敗 <<<"  
	    else
	    	echo ">>> 服務 $JAR_NAME 啓動成功 PID=$! <<<"
	    fi
   fi
   echo "**********************啓動服務 完成**********************"
  }

#停止方法
stop(){
	echo "**********************關閉服務 開始**********************"
  is_exist  
	if [ $? -eq "1" ]; then
	  echo ">>> 無服務運行中"
	else
	  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
	  echo ">>> 服務運行中,PID=$pid . 開始關閉服務."
	  kill -9 $pid
	  echo ">>> 服務已停止."
	fi
	echo "**********************關閉服務 完成**********************"
}

#輸出運行狀態
status(){
	echo "**********************查詢服務狀態 開始**********************"
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> 服務 ${JAR_NAME} is running PID is ${pid} <<<"
  else
    echo ">>> 服務 ${JAR_NAME} is not running <<<"
  fi
  echo "**********************查詢服務狀態 完成**********************"
}

#重啓
restart(){
	echo "**********************重啓服務 開始**********************"
  stop
  echo
  start
  echo "**********************重啓服務 完成**********************"
}

#上線
push(){
	echo "**********************上線服務 開始**********************"
	stop
	echo
	rmJar
	echo
	start
	echo "**********************上線服務 完成**********************"
}

#回滾
rollback(){
	echo "**********************回滾服務 開始**********************"
	stop
	echo
	rollBackJar
	echo
	start
	echo "**********************回滾服務 完成**********************"
}

rmJar() {
	current=`date "+%Y%m%d%H%M%S"`
	jar_new_anme=$JAR_NAME-$current
	
	cp $API_NAME ./target/$jar_new_anme
	echo ">>> 歷史服務備份完成,備份文件:"  $jar_new_anme
	
	rm -rf $API_NAME
	echo ">>> 移除運行中文件:" + $API_NAME
	
	cp ./tmp/$tmp_name $API_NAME
	echo ">>> 拷貝最新jar包並加載:" + $tmp_name
	
	rm -rf ./tmp/$tmp_name
	echo ">>> 移除臨時jar包:" + $tmp_name
}

rollBackJar() {
	target_jar=`ls -lt ./target/ | grep $JAR_NAME | head -n 1 |awk '{print $9}'`
	
	echo ">>> 獲取歷史服務備份文件:"  $target_jar
	cp ./target/$target_jar $API_NAME
	echo ">>> 加載歷史服務備份文件 $target_jar 回滾爲 $API_NAME"
}

getPID() {
	pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
	if [ -z "${pid}" ]; then
   	echo ">>> 服務 $JAR_NAME 未運行"
   	return 1
  else 
  	echo ">>> 服務 $JAR_NAME 運行中"
    return ${pid}
  
  fi
}

#根據輸入參數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  "push")
  	push
  	;;
  "rollback")
  	rollback
  	;;	
  *)
    usage
    ;;
esac
exit 0

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章