使用linux的shell来启动springboot

787人浏览   2024-05-10 16:02:45


当springboot需要在linux中发布时,这时我们要使用linux的脚步来发布微服务,

同理在windows中发布,我们使用bat脚本来发布,linux中我们使用shell的sh来管理微服务的运行

linux的运行需要保证脚步在后台运行,不能出现ctrl+c后,程序就结束,这个显然是不行的,我们要能通过命令查看程序的运行状态,可以实现启动\ 停止\重启\状态查询的功能

我把这个脚步命名为 app.sh

#!/bin/bash
# 定义jar的名称,包括版本号
APP_JAR=myservice-1.0.jar
#定义jar所在的目录
DIR_PATH=/home/spring/myservice
# 使用帮助说明,告诉你如何使用脚本
usehelp() {
   #打印提示
   echo "please use like follow: sh you.sh [ start| stop| restart |state ]"
   exit 1
}

##############################分割线#####################################################

# 根据进程号是否存在,判断jar是否在运行,其中 grep -v grep表示过滤 grep的进程
is_app_running(){
   # 注释的这种写法为过期的写法,目前linux不推荐
   #pid=`ps -ef|grep $APP_JAR|grep -v grep|awk '{print $2}' `
   pid=$(ps -ef|grep $APP_JAR|grep -v grep|awk '{print $2}')
   #如果不存在返包含该字符的进程则返回0,存在返则返回1
   if [ -z "${pid}" ]; then
     return 1
   else
     return 0
    fi
   }

##############################分割线#####################################################
#启动jar,传入环境参数
startApp(){
   is_app_running
   # $? 表示上一步函数调用结果 ,即is_app_running的调用结果
   if [ $? -eq "0" ]; then
     #已经存在,不用再运行
     echo "${APP_JAR} is already running. pid=${pid} ."
   else
     nohup java \
         -Xms256m -Xmx1024m \
         -jar $DIR_PATH/$APP_JAR \
		 #指定端口
         --server.port=6006 \
		 #激活环境
         --spring.profiles.active=test \
		 #指定ip格式
         --eureka.instance.ipAddress=172.16.31.14 \
		 #指定springcloud的与注册中心的通信相关时间
         --eureka.instance.lease-renewal-interval-in-seconds=30 \
         --eureka.instance.lease-expiration-duration-in-seconds=90 \
         --eureka.client.registry-fetch-interval-seconds=30 \
		 #注册指定的注册中心
         --eureka.client.service-url.defaultZone=http://root:123456@172.16.31.12:8081/eureka/,http://root:123456@172.16.31.14:8081/eureka/  \
		 #日志输出到标准设备
         > $DIR_PATH/log.out 2>&1 &
     echo "${APP_JAR} startApp success"
   fi
}
##############################分割线#####################################################
# 停止方法
stopApp(){
  is_app_running
  # $? 表示上一步函数调用结果 ,即is_app_running的调用结果
  if [ $? -eq "0" ]; then
   # $pid 是环境变量,is_app_running里面赋值了,就会到环境变量里面去
   kill -9 $pid
  else
   echo "${APP_JAR} is not running"
  fi
}
##############################分割线#####################################################
# 查看应用运行状态
state(){
 is_app_running
 # $? 表示上一步函数调用结果 ,即is_app_running的调用结果
  if [ $? -eq "0" ]; then
   # $pid 是环境变量,is_app_running里面赋值了,就会到环境变量里面去
   echo "${APP_JAR} is running. Pid is ${pid}"
  else
   echo "${APP_JAR} is NOT running."
 fi
}
##############################分割线#####################################################
# 重启应用
restartApp(){
 stopApp
 startApp
}

##############################分割线##############调用方法#######################################

#使用case语句来判断第一个参数的名称,决定调用哪个方法
case "$1" in
  # 启动应用
 "start")
 startApp
 ;;
 # 停止应用
 "stop")
 stopApp
 ;;
 # 查看状态
 "state")
 state
 ;;
 # 重启应用
 "restart")
 restartApp
 ;;
 *)
 echo " your parameters are not right  $1"
 usehelp
 ;;
esac


运行脚步

查看 jar是否运行: sh app.sh state

停止jar的运行: sh app.sh stop

启动jar: sh app.sh start

重启jar: sh app.sh restart

相关推荐