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


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

    目录结构

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

    /data
    	/start.sh 						   // 启动脚本
    	/stop.sh						   // 关闭脚本
    	/serviceStart.sh				   // 服务启动脚本
    	/serviceStop.sh 				   // 服务关闭脚本
    	/YumeisoftDemo-0.0.1-SNAPSHOT.jar  // 打包的项目Jar包
    	/config							   // 配置文件目录
    		/application.yml			   // 项目配置文件
    	/jdk							   // jdk目录
    	/static							   // 静态资源目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    编写Service调用的脚本

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

    #!/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    #!/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    #!/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

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

    #!/bin/sh
    # 读取config.sh定义的内容
    source $INSTALL_DIR/config.sh
    # 后台方式运行jar包
    nohup java -jar $INSTALL_DIR/$SPRING_JARFILE > $INSTALL_DIR/$LOG_FILE 2>&1 &
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    #!/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    赋权

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

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

    创建一个Service

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

    vim /etc/systemd/system/myService.service
    
    • 1

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

    [Unit]
    Description=MyService
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/data/serviceStart.sh
    ExecStop=/data/serviceStop.sh
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    启用并使用Service

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

  • 相关阅读:
    ByteHouse实时导入技术演进
    作用域安全的构造函数
    Vue框架学习记录之环境安装与第一个Vue项目
    Error: impossible constraint in ‘asm‘
    信息系统项目管理师---第十五、十六章 知识管理及项目变更管理历年考题
    Linux之分区【详细总结】
    【jvm】虚拟机之本地方法栈
    第33章_瑞萨MCU零基础入门系列教程之DHT11温湿度获取实验
    惠普服务器硬盘指示灯不亮或显示蓝色
    【grafana | clickhouse】实现展示多折线图
  • 原文地址:https://blog.csdn.net/yry0304/article/details/134033068