通過 shell 腳本一鍵運行實現 Spring Boot 服務的重啓和日誌的屏幕顯示

腳本說明

腳本是通過運行測試的,實現的功能:

  • 先根據啓動時的 jar 文件名搜索服務進程 ID,根據進程 ID 殺死對應服務;
  • 通過 nohup 啓動 jar,使之後臺運行;
  • 等待 jar 服務的運行日誌文件生成,然後通過 tail 命令及時動態顯示日誌內容

腳本內容

#! /bin/bash

# 默認 profile
my_profile="pro"
# pring Boot 服務的 jar 文件名
project_name="jzy-dinner-fast-1.1.0.jar";
# 日誌文件路徑,根據需要修改
log_file_path="./logs/jzy-dinner.log"

# 如果存在命令行第一個參數,替換默認 profile
if [ -n "$1" ]; then
  my_profile="$1"
fi

echo "  >>> begining lauch project $project_name ....."
# 搜索已經啓動的 Spring Boot 服務進程 ID
pid=$(jps -l|grep $project_name|cut -d ' ' -f1)
echo "  >>> source project process id : $pid"

if [ $pid ]
 then
   echo "  >>> kill source project ......"
   # 殺掉 已存在服務進程
   kill -9  $pid
   sleep 3
   echo "  >>> restart project ......"
 else
  echo "  >>> start project......"
fi

# 新啓動並後臺運行 Spring Boot 服務
nohup java -Xms1g -Xmx1g -Xss1024K -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -server -jar -Dfile.encoding=utf-8 ./$project_name --spring.profiles.active=$my_profile >/dev/null 2>&1 &

# 循環等待日誌文件生成,同時通過動態轉動字符表示等待
spin='-\|/'
i=0
until [ -f $log_file_path  ]
do
i=$(( (i+1) %4 ))
printf "\r[${spin:$i:1}]"
sleep 0.1
done
printf "\n\n >>> tail -f "$log_file_path"\n\n"

# 顯示日誌內容
tail -5f $log_file_path

※ 關於 >/dev/null 2>&1,請參考 nohup 中關於 >/dev/null 2>&1 的相關說明

【完】

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