腳本說明
腳本是通過運行測試的,實現的功能:
- 先根據啓動時的 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 的相關說明
【完】