使用linux的shell来启动springboot
当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