如何在Linux将Spring Boot项目的Jar包注册为开机自启动系统服务

有时候我们需要将Spring Boot打包出来jar文件当做系统服务注册到系统中,本文教你如何操作

目录结构

以下是目录结构,jar文件是从maven package打包出来的,config/application.yml是原先在项目的resources文件夹里,外置出来方便适配开发环境和正式环境。static目录用来存放静态资源,比如vue前端或者上传目录。所有的.sh文件都是本文后续要写的。

js 复制代码
/data
	/start.sh 						   // 启动脚本
	/stop.sh						   // 关闭脚本
	/serviceStart.sh				   // 服务启动脚本
	/serviceStop.sh 				   // 服务关闭脚本
	/YumeisoftDemo-0.0.1-SNAPSHOT.jar  // 打包的项目Jar包
	/config							   // 配置文件目录
		/application.yml			   // 项目配置文件
	/jdk							   // jdk目录
	/static							   // 静态资源目录

编写Service调用的脚本

配置脚本/data/config.sh,如果改包名,直接改这个文件即可

bash 复制代码
#!/bin/sh
# 配置JAR文件名,把它改成你的Jar文件名
SPRING_JARFILE=YumeisoftDemo-0.0.1-SNAPSHOT.jar
# 日志文件位置
LOG_FILE=system.log
# 获取.sh所在路径
INSTALL_DIR=$(cd $(dirname $0);pwd)
# 配置JDK路径
JAVA_HOME=$INSTALL_DIR/jdk
# 设定PATH,不设会无法使用java命令
PATH=$JAVA_HOME/bin:$PATH

手动启动服务脚本/data/start.sh,其中system.log是日志文件名

bash 复制代码
#!/bin/sh
# 读取config.sh定义的内容
source $INSTALL_DIR/config.sh
# 后台方式运行jar包
nohup java -jar $INSTALL_DIR/$SPRING_JARFILE > $INSTALL_DIR/$LOG_FILE 2>&1 &
# 显示日志
tail -f $INSTALL_DIR/$LOG_FILE

手动关闭服务脚本/data/stop.sh

bash 复制代码
#!/bin/sh
# 读取config.sh定义的内容
source $INSTALL_DIR/config.sh
# 获取当前项目运行的进程ID
PID=$(ps -ef | grep "java -jar $INSTALL_DIR/$SPRING_JARFILE" | grep -v grep | awk '{print $2}')

if [ -z "$PID" ]; then
	# 如果没找到则提示未运行
    echo "Spring Boot应用未在运行中."
else
	# 如果找到了,正常终止进程
    kill $PID
    # 显示日志
    tail -f $INSTALL_DIR/$LOG_FILE
    echo "Spring Boot应用已停止."
fi

服务启动脚本/data/serviceStart.sh

bash 复制代码
#!/bin/sh
# 读取config.sh定义的内容
source $INSTALL_DIR/config.sh
# 后台方式运行jar包
nohup java -jar $INSTALL_DIR/$SPRING_JARFILE > $INSTALL_DIR/$LOG_FILE 2>&1 &

服务关闭脚本/data/serviceStop.sh

bash 复制代码
#!/bin/sh
# 读取config.sh定义的内容
source $INSTALL_DIR/config.sh
# 获取当前项目运行的进程ID
PID=$(ps -ef | grep "java -jar $INSTALL_DIR/$SPRING_JARFILE" | grep -v grep | awk '{print $2}')

if [ -z "$PID" ]; then
	# 如果没找到则提示未运行
    echo "Spring Boot应用未在运行中."
else
	# 如果找到了,正常终止进程
    kill $PID
    echo "Spring Boot应用已停止."
fi

赋权

不赋权是无法运行的,所以我们要执行以下命令:

shell 复制代码
chmod a+x /data/*.sh

创建一个Service

接下来我们把这个项目注册为系统服务,myService改成你要改成的服务名:

bash 复制代码
vim /etc/systemd/system/myService.service

因为之前没有这个系统服务,会创建一个新文件,这个文件就是系统服务的启停配置文件,按一下a进入编辑模式,把下面的代码粘贴上去,然后按下Esc、冒号、输入wq、回车。

shell 复制代码
[Unit]
Description=MyService
After=network.target

[Service]
Type=forking
ExecStart=/data/serviceStart.sh
ExecStop=/data/serviceStop.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

这里面的ExecStart和ExecStop都是服务启动和服务停止脚本的绝对路径。Description是指服务的描述信息,这里可以填中文,其他的不要改动。

启用并使用Service

做完以上步骤你就可以在服务器里执行systemctl enable myService命令,即可启用myService服务,然后使用systemctl start myService即可启动服务,systemctl stop myService即可关停服务,system status myService命令可以看到服务的状态。

相关推荐
YC运维2 分钟前
OSPF实验以及核心原理全解
运维·网络·网络协议·智能路由器
古希腊数通小白(ip在学)5 分钟前
HCIA实现不同vlan间的通信
linux·服务器·网络
半桔19 分钟前
【Linux手册】从接口到管理:Linux文件系统的核心操作指南
android·java·linux·开发语言·面试·系统架构
禁默27 分钟前
Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)
linux·vim·excel
nightunderblackcat28 分钟前
新手向:实现ATM模拟系统
java·开发语言·spring boot·spring cloud·tomcat·maven·intellij-idea
超级小忍32 分钟前
Spring Boot 与 Docker 的完美结合:容器化你的应用
spring boot·后端·docker
麦兜*2 小时前
Spring Boot 企业级动态权限全栈深度解决方案,设计思路,代码分析
java·spring boot·后端·spring·spring cloud·性能优化·springcloud
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
longze_76 小时前
Ubuntu连接不上网络问题(Network is unreachable)
linux·服务器·ubuntu
Dirschs6 小时前
【Ubuntu22.04安装ROS Noetic】
linux·ubuntu·ros