一行命令实现Java项目启动停止和重启方式

 更新时间:2025年09月08日 09:03:45   作者:Zhang.jialei  
文章介绍了一个支持启动、停止和重启项目的功能,默认不入参,同时允许用户自定义Java路径和JVM参数,并可通过脚本进行操作

功能

  • 默认不入参是启动项目
  • 支持项目启动、停止、重启:start | stop | restart
  • 支持自定义java路径和jvm参数

使用

[root@master Desktop]# ./bin/demo-sh_start.sh start
程序名称: /root/Desktop/demo-app-sh-1.2.1-SNAPSHOT.jar
日志名称: demo-app-sh-1.2.1-SNAPSHOT
Java配置: -Xmx1024M -Xms256M
程序未运行
开始启动程序 
[root@master Desktop]# ./bin/demo-sh_start.sh stop
程序名称: /root/Desktop/demo-app-sh-1.2.1-SNAPSHOT.jar
日志名称: demo-app-sh-1.2.1-SNAPSHOT
Java配置: -Xmx1024M -Xms256M
程序已运行,PID:[ 10864 ]
停止程序
[root@master Desktop]# ./bin/demo-sh_start.sh restart
程序名称: /root/Desktop/demo-app-sh-1.2.1-SNAPSHOT.jar
日志名称: demo-app-sh-1.2.1-SNAPSHOT
Java配置: -Xmx1024M -Xms256M
程序未运行
重启程序 0 

脚本

#!/bin/sh
# 服务和java配置
appName=%s   # 这里替换jar路径, 如:./demo-app.jar, 建议使用绝对路径
JAVA_HOME=java
JAVA_OPT="-Xmx1024M -Xms256M"
# 日志
logName=$(basename ${appName} .jar)
# 输出程序信息
echo "程序名称:" ${appName}
echo "日志名称:" ${logName}
echo "Java配置:" ${JAVA_OPT}

# 判断是否已经启动
v_pid=$(ps -ef | grep ${logName} | grep -v grep | awk '{print $2}')
if [ -z $v_pid ]; then
  echo "程序未运行"
else
  echo "程序已运行,PID:[" ${v_pid} "]"
fi

if [ $# = 0 ]; then
  # 默认直接启动程序
  if [ -z $v_pid ]; then
    echo "开始启动程序"
  else
    echo "终止本次启动"
    exit 1
  fi
  # 运行java
  nohup ${JAVA_HOME} -jar ${JAVA_OPT} ${appName} >>${logName}.log 2>&1 &
else
  # 停止
  if [ $1 = "stop" ]; then
    s_killRes=$(kill ${v_pid})
    echo "停止程序" ${s_killRes}
    exit 0
  # 重启
  elif [ $1 = "restart" ]; then
  # 重启
    if [ -z $v_pid ]; then
      s_killRes="0"
    else
      s_killRes=$(kill ${v_pid})
    fi
    echo "重启程序" ${s_killRes}
  # 运行
  elif [ $1 = "start" ]; then
    if [ -z $v_pid ]; then
      echo "开始启动程序"
    else
      echo "终止本次启动"
      exit 1
    fi
  else
    echo "未知的指令, 请输入 [start | stop | restart]"
    exit 1
  fi
  # 启动
  nohup ${JAVA_HOME} -jar ${JAVA_OPT} ${appName} >>${logName}.log 2>&1 &
fi

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis-plus自动填充插入更新时间有8小时时差

    mybatis-plus自动填充插入更新时间有8小时时差

    本文主要介绍了mybatis-plus自动填充插入更新时间有8小时时差,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • SpringBoot上传图片与视频不显示问题的解决方案

    SpringBoot上传图片与视频不显示问题的解决方案

    这篇文章主要介绍了关于springboot上传图片与视频不显示问题,最近做毕设时候需要上传视频的图片与视频,但是每次都需要重启前端才能展示出此图片,所以本文给大家介绍了SpringBoot上传图片与视频不显示问题的解决方案,需要的朋友可以参考下
    2024-03-03
  • Spring扩展之基于HandlerMapping实现接口灰度发布实例

    Spring扩展之基于HandlerMapping实现接口灰度发布实例

    这篇文章主要介绍了Spring扩展之基于HandlerMapping实现接口灰度发布实例,灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,需要的朋友可以参考下
    2023-08-08
  • springBoot 过滤器去除请求参数前后空格实例详解

    springBoot 过滤器去除请求参数前后空格实例详解

    这篇文章主要为大家介绍了springBoot 过滤器去除请求参数前后空格实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Scala入门之List使用详解

    Scala入门之List使用详解

    这篇文章主要介绍了Scala入门之List使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Spring Boot与Spring MVC Spring对比及核心概念

    Spring Boot与Spring MVC Spring对比及核心概念

    这篇文章主要为大家介绍了Spring Boot与Spring MVC Spring的对比以及你需要了解的核心概念,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03
  • 利用javaFX实现移动一个小球的示例代码

    利用javaFX实现移动一个小球的示例代码

    这篇文章主要介绍了利用javaFX实现移动一个小球的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 聊聊Spring Boot 如何集成多个 Kafka

    聊聊Spring Boot 如何集成多个 Kafka

    这篇文章主要介绍了Spring Boot 集成多个 Kafka的相关资料,包括配置文件,生成者和消费者配置过程,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-10-10
  • GitLab+Jenkins+Maven+Tomcat 实现自动集成、打包、部署

    GitLab+Jenkins+Maven+Tomcat 实现自动集成、打包、部署

    本文主要介绍了GitLab + Jenkins + Maven + Tomcat 实现自动集成、打包、部署,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • JDK的Parser来解析Java源代码详解

    JDK的Parser来解析Java源代码详解

    这篇文章主要介绍了JDK的Parser来解析Java源代码的相关资料,需要的朋友可以参考下
    2016-09-09

最新评论