要在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: 暂时停止服务不自动重启
如果你希望在停止服务时暂时禁止自动重启,但不想完全禁用服务,可以先使用以下命令:
如果你希望在停止服务时暂时禁止自动重启,但不想完全禁用服务,可以先使用以下命令:
bashsudo systemctl stop my-springboot-app.service
然后临时将服务的Restart
策略改为no
:
sudo systemctl edit my-springboot-app.service
添加以下内容:
ini[Service] Restart=no
保存并退出。这样,服务将不会自动重启。
要恢复原来的自动重启策略,可以删除这些临时修改:
bashsudo systemctl revert my-springboot-app.service
方法 3: 使用systemctl mask
命令
你也可以使用mask
命令来彻底防止服务启动:
sudo systemctl mask my-springboot-app.service
mask
会将服务链接到/dev/null
,从而彻底防止其启动。要解除这个状态,可以使用:
sudo systemctl unmask my-springboot-app.service
这些方法可以根据不同的需求选择。如果你只是想停止服务并防止其自动重启,方法1和2是最直接的选择。
查看系统中为那些服务设置了守护进程?
在Linux系统中,使用systemd
管理的服务通常都会被设置为守护进程。要查看系统中已设置为守护进程的服务,可以使用以下几种方法:
1. 查看所有已启动的systemd
服务
使用以下命令列出系统中所有正在运行的服务:
bashsystemctl list-units --type=service --state=running
该命令会列出所有正在运行的服务,但不一定都是守护进程。
2. 查看已启用的systemd
服务
要查看所有已启用并可能在启动时自动运行的服务,可以使用:
bashsystemctl list-unit-files --type=service --state=enabled
这个命令会列出所有被设置为在系统启动时自动启动的服务,通常这些服务会被设置为守护进程。
3. 通过过滤Restart
策略来查看守护进程服务
你可以检查某个特定服务的配置文件,查看它是否设置了Restart
策略来确定是否为守护进程:
systemctl cat <service-name>.service
如果你想更广泛地查看系统中具有Restart
策略的服务文件,你可以通过查找关键字来实现:
grep -r Restart= /etc/systemd/system/
这个命令会在/etc/systemd/system/
目录下查找所有包含Restart=
配置的服务文件。通常这些服务会被设置为守护进程。
4. 使用ps
命令查看后台进程
尽管这不是专门查看systemd
守护进程的命令,但你也可以使用ps
命令查看当前系统中的所有守护进程:
ps -ef | grep -v tty
这个命令会列出所有没有关联终端的进程(即守护进程)。
通过这些方法,你可以查看系统中已经设置为守护进程的服务。