SpringBoot项目Jar包使用systemctl运行过程

 更新时间:2025年03月24日 09:59:02   作者:太自由  
这篇文章主要介绍了SpringBoot项目Jar包使用systemctl运行过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. 前言

SpringBoot项目打成jar包后,可以直接使用 java -jar xxx.jar 启动。但是为了方便启动和停止服务,通常我们会写两个脚本,分别是启动脚本 start.sh 和 停止脚本 shutdown.sh(这两个脚本内容我们下文会实现);

再进一步的做法是可以把我们的服务添加成系统服务,使用systemctl 进行管理,就像使用 systemctl status firewalld.service 一样。

2. 创建SpringBoot项目并生成jar包

为了演示,先创建一个最普通的SpringBoot项目,在项目中使用 SLFJ + Logback记录日志。

项目目录结构如下。

3. 使用 java -jar 命令在服务器上运行

3.1 前台运行

前台运行,直接在jar包所在目录执行 java -jar xxx.jar 就可以了,如下所示:

3.2 后台运行(带nohup.out日志)

通常我们是让服务在后台运行,可以使用 nohup java -jar xxx.jar & 运行jar包,如下:

这种直接使用 nohup java -jar xxx.jar & 运行jar包会产生一个 nohup.out日志文件,在项目运行过程中的日志都会追加到这个文件中,时间长了这个文件就会非常大,容易打满磁盘,浪费硬盘存储空间。

3.3 后台运行(不带nohup.out日志)

因为我们的项目通常集成了 SLFJ + Logback 进行日志记录,所以不需要生成这个文件,可以使用如下命令运行jar包。

nohup java -jar xxx.jar >/dev/null 2>&1 &

4. 使用脚本实现启动和停止jar包

每次使用 nohup java -jar xxx.jar >/dev/null 2>&1 & 运行项目太麻烦,并且在关闭服务时,还要先找到这个服务的进程号,然后才能关闭。

所以可以把启动项目和关闭项目写成脚本,每次只要执行脚本就可以了。

4.1 启动服务脚本

启动服务脚本如下:

#!/bin/bash
pid=$(pgrep -f 你的jar包名称.jar)
if [ -z $pid ];then
    nohup java -jar 你的jar包名称.jar >/dev/null 2>&1 &
else
    echo "你的jar包名称.jar is already running [pid is $pid]" 
fi

比如我的启动脚本如下:

启动项目的过程如下:

4.2 停止服务脚本

停止服务脚本如下:

#!/bin/bash
pid=$(pgrep -f 你的jar名字.jar)
echo $pid
if [ -z $pid ];then
    echo "你的jar名字.jar is not running"
else
    kill -15 $pid
fi

比如我的停止服务脚本如下:

执行停止服务脚本过程如下:

5. 使用systemctl 命令管理jar包的启动和停止

5.1 添加到系统服务

(1)写一个服务脚本,名称以 .service结尾 【我写的是 demo-service.service,其内容如下,你可以参照下面的写法,修改成你自己的】

[Unit]
Description=demo-service
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/myJar/run_jar
ExecStart=/opt/software/jdk/jdk8/jdk1.8.0_221/bin/java -jar /opt/myJar/run_jar/demo-project-1-1.0-SNAPSHOT.jar
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

(2)把此文件,即demo-service.service 放到 /usr/lib/systemd/system/ 目录下

(3)执行 systemctl daemon-reload 命令

5.2 如何使用

使用请看图中说明。

还可以把启动服务添加到开机自启,执行如下命令,当服务器重启后就会自动启动服务。

systemctl enable demo-service.service

总结

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

相关文章

  • RabbitMQ 最常用的三大模式实例解析

    RabbitMQ 最常用的三大模式实例解析

    这篇文章主要介绍了RabbitMQ 最常用的三大模式实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 老生常谈java中的fail-fast机制

    老生常谈java中的fail-fast机制

    下面小编就为大家带来一篇老生常谈java中的fail-fast机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java Robot应用示例之机器人功能

    Java Robot应用示例之机器人功能

    这篇文章主要为大家详细介绍了Java Robot应用示例之机器人功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 使用maven编译Java项目实例

    使用maven编译Java项目实例

    这篇文章主要介绍了使用maven编译Java项目实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • SpringBoot项目打包war包时无法运行问题的解决方式

    SpringBoot项目打包war包时无法运行问题的解决方式

    在开发工程中,使用启动类启动能够正常启动并测试,下面这篇文章主要给大家介绍了关于SpringBoot项目打包war包时无法运行问题的解决方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MyBatisPlus通过ID更新数据为NULL的四种方法

    MyBatisPlus通过ID更新数据为NULL的四种方法

    本文主要介绍了MyBatisPlus通过ID更新数据为NULL的实现方法,包括@TableField注解、UpdateWrapper、lambdaUpdate及全局配置,具有一定的参考价值,感兴趣的可以了解一下
    2025-08-08
  • Springboot实现对配置文件中的明文密码加密详解

    Springboot实现对配置文件中的明文密码加密详解

    我们在SpringBoot项目当中,会把数据库的用户名密码等配置直接放在yaml或者properties文件中,这样维护数据库的密码等敏感信息显然是有一定风险的。所以本文为大家整理了对配置文件中的明文密码加密的方法,希望对大家有所帮助
    2023-03-03
  • java获取两个List集合的交集代码示例

    java获取两个List集合的交集代码示例

    这篇文章主要给大家介绍了关于java获取两个List集合交集的相关资料,我们可以使用Stream操作来对集合进行一系列的操作,其中包括求交集,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java实现解析Excel复杂表头

    Java实现解析Excel复杂表头

    这篇文章主要为大家详细介绍了如何使用Java实现解析Excel复杂表头功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • JDBC连接SQL Server数据库实现增删改查的全过程

    JDBC连接SQL Server数据库实现增删改查的全过程

    实际开发中手动的输入SQL语句是少之又少,大多数情况下是通过编译代码进行来控制自动执行,下面这篇文章主要给大家介绍了关于JDBC连接SQL Server数据库实现增删改查的相关资料,需要的朋友可以参考下
    2023-04-04

最新评论