通过 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 的相关说明

【完】

你可能感兴趣的:(Spring,Boot,Linux,linux,运维,服务启动)