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 ];thennohup java -jar 你的jar包名称.jar >/dev/null 2>&1 &
elseecho "你的jar包名称.jar is already running [pid is $pid]" 
fi

         比如我的启动脚本如下:

        启动项目的过程如下:

4.2 停止服务脚本

        停止服务脚本如下:

#!/bin/bash
pid=$(pgrep -f 你的jar名字.jar)
echo $pid
if [ -z $pid ];thenecho "你的jar名字.jar is not running"
elsekill -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.rhkb.cn/news/492683.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络-L2TP VPN基础概念与原理

一、概述 前面学习了GRE和IPSec VPN,今天继续学习另外一个也很常见的VPN类型-L2TP VPN。 L2TP(Layer 2 Tunneling Protocol) 协议结合了L2F协议和PPTP协议的优点,是IETF有关二层隧道协议的工业标准。L2TP是虚拟私有拨号网VPDN&…

踩准智能汽车+机器人两大风口,速腾聚创AI+机器人应用双线爆发

日前,RoboSense速腾聚创交出了一份亮眼的Q3财报。受到多重利好消息影响,其股价也应势连续大涨。截止12月9日发稿前,速腾聚创股价近一个月内累计涨幅已超88%。 财务数据方面,速腾聚创在今年前三季度实现总收入约11.3亿元&#xff0…

使用Idea自带的git功能进行分支合并

文章目录 1.背景描述2.分支切换3.分支合并的具体操作4.将在local环境下,从dev合并到qas分支上的代码,推送到远端 1.背景描述 目前在开发的当前项目有四个分支,master(主分支)、pre(预生产分支)、qas(测试分支)、dev(开发分支); …

EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay 3

Assignment 6Beta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsTeamwork—Beta SprintTeam NameFZUGOObjectiveSprint Essay 3_Day5-Day6 (12.15-12.16)Other Reference1. WeChat Mini Program Design Guide 2. Javascript Style Guid…

凯酷全科技抖音电商服务的卓越践行者

在数字经济蓬勃发展的今天,电子商务已成为企业增长的新引擎。随着短视频平台的崛起,抖音作为全球领先的短视频社交平台,不仅改变了人们的娱乐方式,也为品牌和商家提供了全新的营销渠道。厦门凯酷全科技有限公司(以下简…

架构信息收集(小迪网络安全笔记~

附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.2 架构信息收集 引子:一个Web应用的构成,由诸多组件&服务相结合,而域名仅是处于Web架构中最表…

一.photoshop导入到spine

这里使用的是 photoshoptospine脚本 下载地址:https://download.csdn.net/download/boyxgb/90156744 脚本的使用,可以通过文件的脚本的浏览,浏览该脚本使用该脚本,也可以将该脚本放在photoshop安装文件夹里的script文件夹下,具体路径:Photoshop\Presets\Scripts,重启photosho…

Mapbox-GL 的源码解读的一般步骤

Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…

SparkSQL运行架构及原理

文章目录 SparkSQL运行架构及原理1.1. Catalyst优化器简介1.2. SparkSQL运行架构1.3. SparkSQL解析Core底层原理1.4. 执行计划查看 SparkSQL运行架构及原理 1.1. Catalyst优化器简介 SparkSQL使得我们开发人员可以使用DSL风格的数据来处理数据,甚至可以直接使用SQ…

大数据-254 离线数仓 - Airflow 任务调度 核心交易调度任务集成

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…

昇思25天学习打卡营第33天|共赴算力时代

文章目录 一、平台简介二、深度学习模型2.1 处理数据集2.2 模型训练2.3 加载模型 三、共赴算力时代 一、平台简介 昇思大模型平台,就像是AI学习者和开发者的超级基地,这里不仅提供丰富的项目、模型和大模型体验,还有一大堆经典数据集任你挑。…

Docker 镜像加速和配置的分享 云服务器搭建beef-xss

前言 最近很多的docker镜像加速都鸡鸡了 找点资源是越来越不容易了 什么事docker 因为我是个业余的人 我简单的说 docker就是比如我们的软件商店的 下载 docker镜像(之前就是我们在服务器上搭建网站 和环境的很费力费时 之后就有了这个 镜像 :这…

浅谈怎样系统的准备前端面试

前言 创业梦碎,回归现实,7 月底毅然裸辞,苦战两个月,拿到了美团和字节跳动的 offer,这算是从业以来第一次真正意义的面试,遇到蛮多问题,比如一开始具体的面试过程我都不懂,基本一直是…

告别机器人味:如何让ChatGPT写出有灵魂的内容

目录 ChatGPT的一些AI味道小问题 1.提供编辑指南 2.提供样本 3.思维链大纲 4.融入自己的想法 5.去除重复增加多样性 6.删除废话 ChatGPT的一些AI味道小问题 大多数宝子们再使用ChatGPT进行写作时,发现我们的老朋友ChatGPT在各类写作上还有点“机器人味”太重…

【长城杯】Web题 hello_web 解题思路

查看源代码发现路径提示 访问…/tips.php显示无用页面,怀疑…/被过滤,采用…/./形式,看到phpinfo()页面 注意到disable_functions,禁用了很多函数 访问hackme.php,看到页面源码 发现eval函数,包含base64 解密获得php代…

Windows部署Docker及PostgreSQL数据库相关操作

一、Windows安装Docker 1.wsl安装 以管理员身份启动命令行,运行:wsl --install; 安装结束后,重启电脑,以管理员身份启动命令行,运行:wsl --install -d Ubuntu; 中间需要输入用户名…

HTML零基础入门教学

目录 一. HTML语言 二. HTML结构 三. HTML文件基本结构 四. 准备开发环境 五. 快速生成代码框架 六. HTML常见标签 6.1 注释标签 6.2 标题标签:h1-h6 6.3 段落标签:p 6.4 换行标签:br 6.5 格式化标签 6.6 图片标签&a…

Springboot应用开发:工具类整理

目录 一、编写目的 二、映射工具类 2.1 依赖 2.2 代码 三、日期格式 3.1 依赖 3.2 代码 四、加密 4.1 代码 五、Http请求 5.1 依赖 5.2 代码 六、金额 6.1 代码 七、二维码 7.1 依赖 7.2 代码 八、坐标转换 8.1 代码 九、树结构 9.1 代码 9.1.1 节点 9.1…

libaom 源码分析:熵编码模块介绍

AV1 熵编码原理介绍 关于AV1 熵编码原理介绍可以参考:AV1 编码标准熵编码技术概述libaom 熵编码相关源码介绍 函数流程图 核心函数介绍 av1_pack_bitstream 函数:该函数负责将编码后的数据打包成符合 AV1 标准的比特流格式;包括写入序列头 OBU 的函数 av1_write_obu_header…

一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器

大家好,今天给大家分享一个开源的自托管虚拟浏览器项目Neko,旨在利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器,为用户提供安全、私密且多功能的浏览体验。 项目介绍 Neko利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器,提供…