如何在 Linux 中自動重啟失敗的服務

在一個Linux系統中,服務(也稱為守護程序)在處理各種任務,如網頁托管、數據庫管理和網絡等方面發揮著關鍵作用。然而,由於錯誤、高資源使用率或意外系統故障,服務有時可能會崩潰或停止運行。

為了防止停機並確保運行順暢,系統管理員可以配置服務,在其發生故障時自動重新啟動,這對於網絡服務器(Apache,Nginx)、數據庫(MySQL,PostgreSQL)或其他需要全天候可用的關鍵應用程序尤其有用。

在本指南中,我們將解釋如何使用systemd來配置Linux服務,在其停止運行時自動重新啟動。

為什麼要自動重新啟動服務?

以下是您可能希望在Linux中自動重新啟動服務的幾個原因:

  • 最小化停機時間:如果服務意外停止,自動重新啟動可確保用戶經歷最少的中斷。
  • 提高可靠性:像網絡服務器、數據庫和後台進程這樣的服務應始終運行。
  • 減少手動工作:如果沒有自動化,您需要經常檢查服務並在其故障時手動重新啟動。
  • 處理意外故障:如果服務因軟體錯誤、資源限制或系統錯誤而崩潰,systemd 可以在無需管理員介入的情況下重新啟動它。

現在,讓我們來逐步了解使用 systemd 設定自動重新啟動的步驟。

步驟 1:確定要重新啟動的服務

在進行更改之前,您需要知道要配置的服務的確切名稱,可以通過 列出所有正在運行的服務 來獲取。

systemctl list-units --type=service --state=running
List Running Linux Services

如果您已經知道服務名稱,可以檢查其狀態。

systemctl status apache2
Check Running Service Status

apache2 替換為您想要管理的實際服務名稱。

步驟 2:編輯服務配置

Systemd 允許您使用自定義配置文件修改服務行為。我們將使用 systemctl edit 創建一個覆蓋文件,而不是修改系統的全局設置(這些設置可能在更新期間被覆蓋)。

運行以下命令:

systemctl edit apache2

這將在您的 預設文本編輯器 中打開一個空白文件。

如果文件不為空,您將看到可以修改的現有設置。否則,您需要添加必要的重新啟動配置。

Open Systemd Service Configuration File

步驟 3:添加 Systemd 重新啟動配置

在編輯器中添加以下行。

[Service]
Restart=always
RestartSec=5s

這些設置的解釋:

  • Restart=always – 確保服務無論因何原因停止,都會重新啟動。
  • RestartSec=5s – 告訴 systemd 在重新啟動服務之前等待 5 秒,以防止在重複失敗時發生快速重啟迴圈。

添加後,保存並關閉文件。

Add Service Restart Configuration

對 systemd 服務進行更改後,您需要重新加載 systemd 並重新啟動服務,以確保應用新配置:

sudo systemctl daemon-reload
sudo systemctl restart apache2

確認服務現在已設置為自動重啟,運行:

sudo systemctl show apache2 | grep Restart

如果一切配置正確,您應該看到:

Restart=always

步驟 4:在 Linux 中測試自動重啟

為確保配置有效,您可以手動停止服務並檢查是否重新啟動。

sudo systemctl stop apache2

等待 5 秒,然後檢查其狀態。

sudo systemctl status apache2

如果服務再次運行,自動重啟正常運作!

其他重啟選項

根據您的需求,systemd 提供不同的重啟策略:

  • Restart=always – 服務總是重新啟動,即使是手動停止。
  • Restart=on-failure – 只有在服務以錯誤退出時才重新啟動(但手動停止不會)。
  • Restart=on-abnormal – 若服務因信號(如分段錯誤)而崩潰,則重新啟動服務。
  • Restart=on-watchdog – 若服務執行時超時,則重新啟動服務。

您可以根据您的需求,将Restart=always替换为以下任何选项之一。

如何检查服务日志以解决问题

如果一个服务一直失败,建议使用journalctl命令来查看该服务的日志,该命令将显示该服务在过去10分钟内的日志。

journalctl -u apache2 --since "10 minutes ago"

要获取实时日志流,请使用:

journalctl -u apache2 -f
结论

设置自动重新启动失败的服务可以确保关键应用程序在不需要手动干预的情况下继续运行。通过使用systemd的重新启动选项,可以最大程度地减少停机时间,提高系统稳定性,并减少手动故障排除的需求。

Source:
https://www.tecmint.com/automatically-restart-service-linux/