要在Linux系統(tǒng)上將Spring Boot打包的jar服務(wù)設(shè)置為守護(hù)進(jìn)程,并實(shí)現(xiàn)服務(wù)掛掉后自動(dòng)重啟,你可以使用systemd或supervisord這樣的工具。
我選擇了systemd的方案
最終腳本如下:
創(chuàng)建一個(gè)腳本 /home/beirui/start-beirui-admin.sh,內(nèi)容如下:
#!/bin/bash /usr/bin/java -jar /home/beirui/beirui-admin.jar > /home/beirui/beiruiAdminLog.txt 2>&1
然后給這個(gè)腳本賦予執(zhí)行權(quán)限:
sudo chmod +x /home/beirui/start-beirui-admin.sh
創(chuàng)建服務(wù)單元文件如下
1. 創(chuàng)建一個(gè)systemd服務(wù)文件
首先,創(chuàng)建一個(gè)systemd服務(wù)文件,例如my-springboot-app.service。
sudo nano /etc/systemd/system/my-springboot-app.service
2. 編輯服務(wù)文件
在文件中添加以下內(nèi)容,替換占位符為你的實(shí)際信息:[Unit]
Description=Beirui Sap Qimen Spring Boot Application After=network.target [Service] User=root
# 設(shè)置工作目錄為你的Spring Boot應(yīng)用所在目錄 WorkingDirectory=/home/beirui ExecStart=/home/beirui/start-beirui-admin.sh
#在某些情況下,使用重定向符號(hào)(>)在ExecStart中可能無法正常工作。你可以嘗試將日志重定向到文件的操作移動(dòng)到一個(gè)腳本中,然后在ExecStart中調(diào)用這個(gè)腳本。
#使用下面兩種方式,都沒有實(shí)現(xiàn)將日志輸出到 /home/beirui/beiruiAdminLog.txt中,故采取腳本調(diào)用的方式
#只能通過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. 加載服務(wù)文件并啟動(dòng)服務(wù)
運(yùn)行以下命令以重新加載systemd,啟用并啟動(dòng)你的Spring Boot服務(wù):
sudo systemctl daemon-reload sudo systemctl enable my-springboot-app.service sudo systemctl start my-springboot-app.service
4. 檢查服務(wù)狀態(tài)
你可以用以下命令檢查服務(wù)是否在運(yùn)行:
sudo systemctl status my-springboot-app.service
5. 自動(dòng)重啟服務(wù)
Restart=always這一行會(huì)確保當(dāng)服務(wù)掛掉時(shí),它會(huì)自動(dòng)重啟。
你可以根據(jù)需要調(diào)整RestartSec的時(shí)間來設(shè)定重啟的延遲時(shí)間。
通過這些步驟,你的Spring Boot服務(wù)將作為守護(hù)進(jìn)程運(yùn)行,并在崩潰或停止后自動(dòng)重啟。
在某些情況下,需要停止該服務(wù),如何拒絕自動(dòng)重啟服務(wù)呢
要在特定情況下停止Spring Boot服務(wù),并且不希望它自動(dòng)重啟,你可以使用以下方法:
方法 1: 手動(dòng)停止服務(wù)并禁用自動(dòng)重啟
你可以通過以下命令停止服務(wù)并同時(shí)禁用自動(dòng)重啟功能:
sudo systemctl stop my-springboot-app.service sudo systemctl disable my-springboot-app.service
disable命令會(huì)防止服務(wù)在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng),也會(huì)避免服務(wù)在手動(dòng)停止后自動(dòng)重啟。
方法 2: 暫時(shí)停止服務(wù)不自動(dòng)重啟
如果你希望在停止服務(wù)時(shí)暫時(shí)禁止自動(dòng)重啟,但不想完全禁用服務(wù),可以先使用以下命令:
如果你希望在停止服務(wù)時(shí)暫時(shí)禁止自動(dòng)重啟,但不想完全禁用服務(wù),可以先使用以下命令:
sudo systemctl stop my-springboot-app.service 然后臨時(shí)將服務(wù)的Restart策略改為no:
sudo systemctl edit my-springboot-app.service 添加以下內(nèi)容:
[Service] Restart=no 保存并退出。這樣,服務(wù)將不會(huì)自動(dòng)重啟。
要恢復(fù)原來的自動(dòng)重啟策略,可以刪除這些臨時(shí)修改:
sudo systemctl revert my-springboot-app.service 方法 3: 使用systemctl mask命令
你也可以使用mask命令來徹底防止服務(wù)啟動(dòng):
sudo systemctl mask my-springboot-app.service mask會(huì)將服務(wù)鏈接到/dev/null,從而徹底防止其啟動(dòng)。要解除這個(gè)狀態(tài),可以使用:
sudo systemctl unmask my-springboot-app.service 這些方法可以根據(jù)不同的需求選擇。如果你只是想停止服務(wù)并防止其自動(dòng)重啟,方法1和2是最直接的選擇。
浙公網(wǎng)安備 33010602011771號(hào)