通过 shell 脚本一键运行实现 Spring Boot 服务的重启和日志的屏幕显示

    技术2022-07-10  132

    脚本说明

    脚本是通过运行测试的,实现的功能:

    先根据启动时的 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 的相关说明

    【完】

    Processed: 0.010, SQL: 9