脚本说明
脚本是通过运行测试的,实现的功能:
- 先根据启动时的 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 的相关说明
【完】