当前位置:   article > 正文

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

linux 启动springboot jar

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

查看是否安装了Systemd

执行以下命令,查看是否有systemd在运行,如果有则可以用本文的方法。

ps -aux|grep systemd
  • 1

目录结构

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

/data
	/start.sh 						   // 启动脚本
	/startService.sh				   // 服务启动脚本
	/stopService.sh 				   // 服务关闭脚本
	/YumeisoftDemo-0.0.1-SNAPSHOT.jar  // 打包的项目Jar包
	/config							   // 配置文件目录
		/application.yml			   // 项目配置文件
	/jdk							   // jdk目录(找一个兼容的解压即可)
	/static							   // 静态资源目录
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

编写Service调用的脚本

配置脚本/data/config.sh,原样写上即可

#!/bin/sh
# 日志文件位置
LOG_FILE=system.log
# 配置JDK路径
JAVA_HOME=$STARTUP_DIR/jdk
# 设定PATH,不设会无法使用java命令
PATH=$JAVA_HOME/bin:$PATH
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

手动启动服务脚本/data/start.sh,原样写上即可,执行它之后日志将输出到控制台,按下Ctrl+C即可停止输出

#!/bin/sh
# 读取config.sh定义的内容
STARTUP_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
source $STARTUP_DIR/config.sh
# 后台方式运行jar包
for jarfile in "$STARTUP_DIR"/*.jar; do
    if [ -f "$jarfile" ]; then
        java -jar -Dspring.config.location=file:"$STARTUP_DIR/config/application.yml" "$jarfile"
    fi
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

服务启动脚本/data/startService.sh,原样写上即可

#!/bin/sh
# 读取config.sh定义的内容
STARTUP_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
source $STARTUP_DIR/config.sh
# 后台方式运行jar包
for jarfile in "$STARTUP_DIR"/*.jar; do
    if [ -f "$jarfile" ]; then
        nohup java -jar -Dspring.config.location=file:"$STARTUP_DIR/config/application.yml" "$jarfile" >> "$STARTUP_DIR/$LOG_FILE" 2>&1 &
        echo "$jarfile已启动."
    fi
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

服务关闭脚本/data/stopService.sh,原样写上即可

#!/bin/sh
# 读取config.sh定义的内容
STARTUP_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
source $STARTUP_DIR/config.sh

for jarfile in "$STARTUP_DIR"/*.jar; do
    if [ -f "$jarfile" ]; then
        PID=$(ps -ef | grep "$jarfile" | grep -v grep | awk '{print $2}')
        if [ -z "$PID" ]; then
            # 如果没找到则提示未运行
            echo "$jarfile未在运行中."
        else
            # 如果找到了,正常终止进程
            kill $PID
            echo "$jarfile已停止."
        fi
    fi
done

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

赋权

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

chmod a+x /data/*.sh
  • 1

创建一个Service

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

# CentOS 用这个:
vim /etc/systemd/system/myService.service
# OpenEuler等国产操作系统 用这个:
vim /usr/lib/systemd/system/myService.service
  • 1
  • 2
  • 3
  • 4

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

[Unit]
Description=Spring Boot Application Service
After=network.target

[Service]
Type=forking
ExecStart=/bin/bash /data/startService.sh
ExecStop=/bin/bash /data/stopService.sh

[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

启用并使用Service

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

常见问题

  1. 如果启动时报错,则有可能是SELinux正在启动,关闭SELinux即可
  2. 如果系统服务文件不生效,则可以尝试使用systemctl daemon-reload来重新加载
  3. 如果不能启动,也可能是/bin/bash不存在,ls /bin/bash看看是否有
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/834284
推荐阅读
相关标签
  

闽ICP备14008679号