将SpringBoot打包之后的jar设为守护进程

黄洪波写点东西的地方 / 2024-08-28 / 原文

要在Linux系统上将Spring Boot打包的jar服务设置为守护进程,并实现服务挂掉后自动重启,你可以使用systemd或supervisord这样的工具。

我选择了systemd的方案

最终脚本如下:

创建一个脚本 /home/beirui/start-beirui-admin.sh,内容如下:

#!/bin/bash
/usr/bin/java -jar /home/beirui/beirui-admin.jar > /home/beirui/beiruiAdminLog.txt 2>&1

然后给这个脚本赋予执行权限:

sudo chmod +x /home/beirui/start-beirui-admin.sh

 

创建服务单元文件如下

1. 创建一个systemd服务文件

首先,创建一个systemd服务文件,例如my-springboot-app.service

sudo nano /etc/systemd/system/my-springboot-app.service

2. 编辑服务文件

在文件中添加以下内容,替换占位符为你的实际信息:[Unit]

Description=Beirui Sap Qimen Spring Boot Application
After=network.target


[Service]
User=root
# 设置工作目录为你的Spring Boot应用所在目录 WorkingDirectory
=/home/beirui ExecStart=/home/beirui/start-beirui-admin.sh
#在某些情况下,使用重定向符号(>)在 ExecStart 中可能无法正常工作。你可以尝试将日志重定向到文件的操作移动到一个脚本中,然后在 ExecStart 中调用这个脚本。
#使用下面两种方式,都没有实现将日志输出到 /home/beirui/beiruiAdminLog.txt中,故采取脚本调用的方式
#只能通过journalctl -u beirui-admin.service -f查看日志
#ExecStart
=/usr/bin/java -jar /home/beirui/beirui-admin.jar >> /home/beirui/beiruiAdminLog.txt 2>&1 #ExecStart=/usr/bin/java -jar /home/beirui/beirui-admin.jar SuccessExitStatus=143 Restart=always RestartSec=10 #StandardOutput=file:/home/beirui/beiruiAdminLog.txt #StandardError=file:/home/beirui/beiruiAdminLog.txt [Install] WantedBy=multi-user.target

3. 加载服务文件并启动服务

运行以下命令以重新加载systemd,启用并启动你的Spring Boot服务:

sudo systemctl daemon-reload
sudo systemctl enable my-springboot-app.service
sudo systemctl start my-springboot-app.service

4. 检查服务状态

你可以用以下命令检查服务是否在运行:

sudo systemctl status my-springboot-app.service

5. 自动重启服务

Restart=always这一行会确保当服务挂掉时,它会自动重启。

你可以根据需要调整RestartSec的时间来设定重启的延迟时间。

通过这些步骤,你的Spring Boot服务将作为守护进程运行,并在崩溃或停止后自动重启。

 

在某些情况下,需要停止该服务,如何拒绝自动重启服务呢

要在特定情况下停止Spring Boot服务,并且不希望它自动重启,你可以使用以下方法:

方法 1: 手动停止服务并禁用自动重启

你可以通过以下命令停止服务并同时禁用自动重启功能:

sudo systemctl stop my-springboot-app.service
sudo systemctl disable my-springboot-app.service

disable命令会防止服务在系统启动时自动启动,也会避免服务在手动停止后自动重启。

方法 2: 暂时停止服务不自动重启

如果你希望在停止服务时暂时禁止自动重启,但不想完全禁用服务,可以先使用以下命令:

如果你希望在停止服务时暂时禁止自动重启,但不想完全禁用服务,可以先使用以下命令:

bash
sudo systemctl stop my-springboot-app.service

然后临时将服务的Restart策略改为no

bash
sudo systemctl edit my-springboot-app.service

添加以下内容:

ini
[Service] Restart=no

保存并退出。这样,服务将不会自动重启。

要恢复原来的自动重启策略,可以删除这些临时修改:

bash
sudo systemctl revert my-springboot-app.service

方法 3: 使用systemctl mask命令

你也可以使用mask命令来彻底防止服务启动:

bash
sudo systemctl mask my-springboot-app.service

mask会将服务链接到/dev/null,从而彻底防止其启动。要解除这个状态,可以使用:

bash
sudo systemctl unmask my-springboot-app.service

这些方法可以根据不同的需求选择。如果你只是想停止服务并防止其自动重启,方法1和2是最直接的选择。

 

查看系统中为那些服务设置了守护进程?