使用systemd 監控服務并實現故障自動重啟

一、為什么需要自動重啟?

在生產環境中,服務可能因內存溢出、資源競爭、外部依賴中斷等問題意外崩潰。手動恢復效率低下,而?systemd 的自動重啟機制可在秒級內恢復服務,顯著提升系統可用性。

?? 二、systemd 自動重啟的核心配置

1.?服務文件關鍵參數

在?/etc/systemd/system/your-service.service?中定義以下參數:

[Service]
Restart=on-failure   # 服務異常退出時重啟(推薦)
RestartSec=10s        # 重啟前等待時間(避免頻繁重啟)
StartLimitIntervalSec=300 # 300秒內最多重啟次數
StartLimitBurst=5     # 最多嘗試5次重啟

2.?重啟策略詳解

策略適用場景
Restart=on-failure服務因錯誤(非零退出碼)終止時重啟,適合需手動干預的場景(如調試)
Restart=always無條件重啟(包括正常退出),適用于數據庫、Web服務器等關鍵服務

3.?防崩潰保護機制

StartLimitIntervalSec=60
StartLimitBurst=3

若服務在?60秒內崩潰超過3次,systemd 將停止重啟并標記為失敗狀態,防止資源耗盡。

🛠? 三、實戰配置示例(以Spring Boot應用為例)

[Unit]
Description=Spring Boot Application
After=network.target postgresql.service  # 依賴網絡和數據庫[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/app.jar
Restart=on-failure
RestartSec=30s
Environment="DB_URL=jdbc:postgresql://localhost/db"
StartLimitIntervalSec=300
StartLimitBurst=5# 日志重定向(可選)
StandardOutput=file:/var/log/myapp.log
StandardError=file:/var/log/myapp-error.log[Install]
WantedBy=multi-user.target

操作命令

sudo systemctl daemon-reload              # 重載配置
sudo systemctl enable your-service        # 開機自啟
sudo systemctl start your-service         # 立即啟動

🔍 四、故障排查技巧

  1. 查看實時狀態

    systemctl status your-service  # 檢查運行狀態和最近錯誤
    
  2. 追蹤日志

    journalctl -u your-service -f  # 實時日志
    
  3. 測試自動重啟

    sudo kill -9 $(pgrep -f "app.jar")  # 模擬崩潰
    systemctl status your-service      # 確認是否在30秒后重啟
    

?? 五、避坑指南

  1. 權限問題:若服務以非 root 用戶運行,需確保該用戶對文件路徑有讀寫權限。
  2. 環境變量缺失:通過?Environment?顯式聲明變量(如?JAVA_HOME)。
  3. 資源泄漏:頻繁重啟可能加劇資源消耗,建議結合?cgroups?限制內存/CPU:
    MemoryLimit=1G   # 限制內存為1GB
    CPUQuota=80%     # 限制CPU使用率
    

💡 六、進階技巧

  • 多實例服務:使用模板創建多個實例(如?app@1.serviceapp@2.service)。
  • 安全隔離:啟用沙盒模式增強安全性:
    PrivateTmp=true         # 獨立臨時目錄
    ProtectSystem=strict     # 禁止寫入系統文件
    
  • 看門狗機制:配合?WatchdogSec=30?實現應用級心跳檢測。

💎 總結

> systemd 的自動重啟不是簡單的“重啟開關”,而是融合了熔斷機制、依賴管理、資源隔離的企業級運維方案。
通過合理配置?Restart?策略與資源限制,可將服務停機時間縮短至秒級,同時避免崩潰循環引發的雪崩效應。其日志集成(journalctl)和狀態監控(systemctl status)能力,進一步降低了運維復雜度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87618.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在 React 中使用 WebSockets 構建實時聊天應用程序

實時通信已成為現代 Web 應用程序(尤其是在聊天應用程序中)不可或缺的功能。實時通信提供了一種強大的方法來實現客戶端和服務器之間的實時雙向通信。在本指南中,我們將逐步講解如何使用React WebSockets構建實時聊天應用程序。 先決條件 在…

實驗五-Flask的簡易登錄系統

一、實驗目的和任務 1.掌握Flask框架的基本使用方法 2.理解Web應用的會話管理機制 3.實現用戶認證系統的基本功能 4.學習模板繼承和表單處理技術 要求:請將思考題的答案寫在實驗報告中 二、實驗內容 1.基礎環境搭建:創建項目目錄結構、安裝必要依賴包…

WebSocket類明明注入了Bean,為什么報錯為null

在 WebSocket 類中注入 Bean 看似可行而注入 Bean 報錯為null,通常是由于Spring 的單例管理機制與 WebSocket 多實例創建特性沖突導致的,具體分析如下:原因分析Spring 的單例特性:Spring 默認以單例模式管理 Bean,即一…

Python 爬蟲開發指南:從基礎到實戰

在大數據時代,數據成為了寶貴的資源。Python 爬蟲作為高效獲取網絡數據的工具,受到越來越多開發者的關注。本文將詳細介紹 Python 爬蟲的相關知識,助你快速入門并掌握爬蟲開發的核心要點。 一、Python 爬蟲概述 Python 爬蟲,即網…

99、git 超時問題

報錯: Push failed ssh: connect to host github.com port 22: Connection timed out Could not read from remote repository

CountDownLatch 詳細介紹

CountDownLatch 是 Java 中 java.util.concurrent 包提供的一個同步工具類,用于協調多個線程之間的執行順序。它允許一個或多個線程等待,直到其他線程完成一組操作后繼續執行。CountDownLatch 是一種倒計數鎖存器,通過設置一個初始計數器值&a…

Hadoop之HDFS

Hadoop之HDFS HDFS的Shell操作 啟動Hadoop集群(方便后續測試) [atguigu@hadoop102 ~]$ sbin/start-dfs.sh [atguigu@hadoop102 ~]$ sbin/start-yarn.sh-help:輸出這個命令參數 [atguigu@hadoop102 ~]$ hadoop fs -help rm-ls:顯示目錄信息 [atguigu@hadoop102 ~]$ hadoop …

【1.4 漫畫PostgreSQL高級數據庫及國產數據庫對比】

🐘 漫畫PostgreSQL高級數據庫及國產數據庫對比 👨?💻 小明:“老王,除了MySQL,還有哪些優秀的關系型數據庫?國產數據庫發展得怎么樣?” 🧙?♂? 架構師老王:…

OLT、ONU、ONT、SFU、HGU、ODN,它們是什么?它們之間有什么區別?

我們經常會看到OLT、ONU、ONT、SFU、HGU等設備術語。它們分別是什么?又有什么區別呢? PON組件:OLT、ONU、ONT和ODN 無源光網絡(PON)采用光纖和分路器,以點對多點拓撲將數據從單一源分發到多個用戶。與有源光網絡 (AON)不同,PON 僅在光域中運行&#…

sql USING 簡化 JOIN 操作

在 SQL 中,USING 是一種用于簡化 JOIN 操作的語法糖,它允許你明確指定連接表時所依據的列名。與傳統的 ON 子句相比,USING 提供了更簡潔的語法1. 基本語法與作用table1 JOIN table2 USING (column_name);將 table1 和 table2 中 column_name …

android開發中的 AndroidX 版本的查看 及 constraintLayout的簡單用法

1、查看庫的版本 平常我們經常會用到一些庫,但是不知道是什么版本,也不知道最新的是什么版本,當然最好的就是到官網去查看,或者三方的maven庫。 2、官方地址 AndroidX 版本 | Jetpack | Android Developers 3、比如我們來…

oracle鎖表,oracle解鎖表,oracle用戶連接數

一、查看被鎖的表 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id lo.object_id and lo.session_id sess.sid; 二、解鎖表語句 alter …

3D可視化:開啟多維洞察新時代

3D可視化技術以一種前所未有的方式,將數據、模型與現實世界緊密相連,為人們帶來了沉浸式、交互式的全新體驗,徹底革新了信息的呈現與理解方式。一、3D可視化的技術原理從技術本質來看,3D可視化基于一系列復雜而精妙的原理。通過數…

List中的對象進行排序處理

以下是使用 Java Stream 對對象列表按 id 和 age 排序的完整示例,包含升序和降序兩種場景: 1. 定義測試對象類 Getter Setter public class Person {private int id;private int age; }2. 排序實現代碼 import java.util.*; import java.util.stream.…

秋招Day14 - Redis - 底層結構

Redis都有哪些底層數據結構? 有八種核心的底層數據結構。 SDS Redis自己實現的動態字符串,SDS結構中直接存儲了已使用的字符數組長度len和未使用的字符數組長度free,所以獲取長度的時間復雜度是O(1),還支持動態擴容&#xff0c…

使用Mac自帶的圖像捕捉導出 iPhone 相冊

用 數據線 將 iPhone 連接到 Mac必須是數據線,有些充電線插上去后無法識別到iphone在 iPhone 上點擊“信任此電腦”在 Mac 上打開應用:快速方式:按 Command Space 打開 Spotlight,輸入 圖像捕捉 或 Image Capture,回車或者從 /系…

【UniApp picker-view 多列對齊問題深度剖析與完美解決】

UniApp picker-view 多列對齊問題深度剖析與完美解決一次看似簡單的樣式調整,卻引發了對構建工具、CSS 預處理和組件渲染機制的深度思考創作時間: 2025/7/1 技術棧: UniApp Vue3 TypeScript PostCSS 問題級別: 🔴 高級🎯 問題背景 在開發 …

R Studio開發中記錄

1.如何將tar.gz格式的源碼R包編譯為zip格式的二進制R包。 R CMD INSTALL --build knhanes.tar.gz R CMD INSTALL --build nhanes.tar.gz 2.下載RTools RTools: Toolchains for building R and R packages from source on Windows 3.修改環境變量 PATH$PATH:/d/rtools45/usr…

量化交易中的隱藏模式識別:基于潛在高斯混合模型的機會挖掘

*——從市場噪聲中提取黃金信號的數學藝術** > 2025年3月,某對沖基金使用潛在高斯混合模型捕捉到銅期貨的異常波動模式,提前布局實現單月收益47%。核心代碼僅20行,卻顛覆了傳統技術分析范式。 --- ### 01 市場迷思:為何90%的交易者失敗? 金融市場本質是**非…

Qt窗口被外部(非Qt內部機制)強制銷毀,第二次再重復使用不顯示

在Qt開發中,窗口被外部(非Qt內部機制)強制銷毀 警告信息 External WM_DESTROY received for QWidgetWindow(0x108b8cbdb10, name"xxxxx") , parent: QWindow(0x0) , transient parent: QWindow(0x0) 使用場景 代碼結構如下&#x…