SpringBoot的jar包方式的Linux启动脚本

学海无涯,旅“途”漫漫,“途”中小记,如有错误,敬请指出,在此拜谢!

前情提要

1.此脚本仅支持SpringBoot的java -jar的形式。
2.此脚本需要在linux上安装好java,且环境变量中已经存在java的功能命令。即在命令行中,使用java、jps命令有结果。(如果没有配置环境,请将代码行中的java、jps相关命令前加上java的存放地址即可)
3.如果运行脚本时出现换行符或者制表符的问题,请用dos2unix进行转换。

脚本

############################################
# java SpringBoot启动脚本
# 注意此脚本仅支持已经配置java的环境变量
# @author shaolin
# @since 2019年12月27日
# @param 需要编辑APP_HOME,APP_NAME,APP_OPTS,LOG_PATH
# 使用命令为   [该文件.sh] [命令] [文件名]  
# 比如    operation.sh start springboot.jar
# 其中命令包含 
# start 启动
# stop 停止 
# status 查看状态
# restart 重启(即先stop,在start)
# info 查看脚本信息
############################################

############################################
# 判断传入第二个参数的文件是否存在
# 如果存在则输出"已查找到文件",并继续执行
# 如果不存在则输出"文件不存在!",然后停止执行
############################################
if [ -f $2 ];then
    echo "已查找到文件"
else
    echo "文件不存在!"
    exit 1
fi

#Java程序所在的目录(如果该方法在jar的同一目录,则此处为点)
APP_HOME="."

#Java程序的名字
APP_NAME=$2

#java虚拟机启动参数
#JAVA_OPTS="-Xms128m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=128m"
JAVA_OPTS=""

#如果要将控制台日志输出到文件中,则此处配置$APP_HOME/output.out,如果不输出,则为/dev/null
LOG_PATH="/dev/null"

#初始化psid变量(全局)
psid=0

###################################
#(函数)判断程序是否已启动
#
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid ($1部分),及Java程序名称($2部分)
###################################
checkpid() {
    javaps=`jps -l | grep $APP_NAME`
    if [ -n "$javaps" ]; then
     psid=`echo $javaps | awk '{print $1}'`
    else
     psid=0
    fi
}

###################################
#(函数)启动程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示程序已启动
#3. 如果程序没有被启动,则执行启动命令行
#4. 启动命令执行后,再次调用checkpid函数
#5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]
#注意:echo -n 表示打印字符后,不换行
#注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法
###################################
start() {
    checkpid
    if [ $psid -ne 0 ]; then
     echo "================================"
     echo "warn: 系统已经启动! (pid=$psid)"
     echo "================================"
    else
     nohup java -jar $JAVA_OPTS $APP_HOME/$APP_NAME >> $LOG_PATH 2>&1 &
     checkpid
     if [ $psid -ne 0 ]; then
         echo "(pid=$psid) 系统启动成功[OK]"
     else
         echo "系统启动失败[Failed]"
     fi
    fi
}

###################################
#(函数)停止程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行
#3. 使用kill -9 pid命令进行强制杀死进程
#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?
#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]
#6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。
#注意:echo -n 表示打印字符后,不换行
#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值
###################################
stop() {
    checkpid
    if [ $psid -ne 0 ]; then
     echo -n "正在停止系统 ...(pid=$psid) "
     su - $RUNNING_USER -c "kill -9 $psid"
     if [ $? -eq 0 ]; then
         echo "停止成功[OK]"
     else
         echo "停止失败[Failed]"
     fi
     checkpid
     if [ $psid -ne 0 ]; then
         stop
     fi
    else
     echo "================================"
     echo "warn: 系统没有运行"
     echo "================================"
    fi
}

###################################
#(函数)检查程序运行状态
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid
#3. 否则,提示程序未运行
###################################
status() {
    checkpid
    if [ $psid -ne 0 ];then
     echo "系统正在运行! (pid=$psid)"
    else
     echo "系统没有在运行!"
    fi
}

###################################
#(函数)打印系统环境参数
###################################
info() {
    echo "System Information:"
    echo "****************************"
    echo `head -n 1 /etc/issue`
    echo `uname -a`
    echo
    echo "JAVA_HOME=$JAVA_HOME"
    echo `$JAVA_HOME/bin/java -version`
    echo
    echo "APP_HOME=$APP_HOME"
    echo "****************************"
}

###################################
#读取脚本的第一个参数($1),进行判断
#参数取值范围:{start|stop|restart|status|info}
#如参数不在指定范围之内,则打印帮助信息
###################################
case "$1" in
    'start')
     start
     ;;
    'stop')
    stop
    ;;
    'restart')
    stop
    start
    ;;
    'status')
    status
    ;;
    'info')
    info
    ;;
*)
    echo "Usage: $0 {start|stop|restart|status|info}"
    exit 1
esac
exit 0

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Doubletree_lin

老板,爱你,么么哒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值