当前位置: 首页 > article >正文

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

        


http://www.kler.cn/a/447131.html

相关文章:

  • clickhouse优化记录
  • 2024年港澳台华侨生联考师范类院校录取情况来
  • javaFX.(蜜雪冰城点餐小程序)MySQL数据库
  • 关于小程序内嵌h5打开新的小程序
  • 多智能体/多机器人网络中的图论法
  • 搜索召回:倒排召回
  • STM32F407寄存器点灯
  • 批量提取zotero的论文构建知识库做问答的大模型(可选)——含转存PDF-分割统计PDF等
  • 【react项目】从零搭建react项目[nodejs安装]
  • 我的2024年度总结
  • 【AIGC-ChatGPT进阶副业提示词】末日生存指南 2.0:疯狂科学家的荒诞智慧
  • C vs C++: 一场编程语言的演变与对比
  • 【什么是事务?】
  • ISICDM 2024|思腾合力受邀参加第七届图像计算与数字医学国际研讨会
  • Clickhouse(Centos)
  • QString转const char* bug
  • vue中如何实现商品多规格添加(后台商城管理系统)
  • JVM性能优化一:初识内存泄露-内存溢出-垃圾回收
  • vue3前端组件库的搭建与发布(一)
  • MFC/C++学习系列之简单记录4——错误解决与错误提示
  • Unity 3D饼状图效果
  • 深度学习实战101-基于生成对抗网络GAN在医学核磁共振跨模态的应用,以及性能优化,并结合代码实例进行说明
  • Pytorch | 从零构建Vgg对CIFAR10进行分类
  • 安全算法基础(一)
  • 【Prompt Engineering】7 聊天机器人
  • nginx-rtmp服务器搭建