使用Shell腳本實現Linux系統資源監控郵件告警

前言

1. 問題背景與需求

2. Bash 腳本監控資源

3. Bash 腳本判斷閾值

4. 配置 msmtp 發送郵件

4.1 安裝 msmtp

4.2 創建配置文件 /etc/msmtprc

5. 發送郵件

5.1 給別人發郵件

6. 完整示例腳本

7. 測試方法

8. 常見問題解答

9. 總結

前言

在運維過程中,監控服務器的 CPU、內存和磁盤使用率非常重要。當資源使用率過高時,及時收到郵件告警可以避免服務中斷。本文將結合實踐,詳細講解如何用 Bash 腳本監控系統資源,并通過 msmtp 發送郵件告警。


1. 問題背景與需求

  • 監控目標

    • CPU 使用率

    • 內存使用率

    • 磁盤使用率

  • 告警條件:當任意資源使用率超過閾值時發送郵件

  • 郵件需求

    • 發送到指定收件人(自己或他人郵箱)

    • 郵件包含主題和正文

    • 郵件通過自己的 SMTP 賬戶發送(例如 QQ 郵箱)


2. Bash 腳本監控資源

獲取系統資源使用率的常用命令如下:

# CPU 使用率 
cpu_use=$(top -bn1 | grep "Cpu(s)" | awk -F, '{print 100 - $4}' | awk -F. '{print $1}')

說明

  • top -bn1:以批處理模式(非交互)輸出一次 CPU 和內存狀態

  • grep "Cpu(s)":篩選包含 CPU 信息的行

  • awk -F, '{print 100 - $4}'$4%id(CPU 空閑百分比),用 100 - $4 計算 CPU 使用率

  • awk -F. '{print $1}':取整數部分,方便比較閾值

# 內存使用率
mem_use=$(free | awk '/Mem/{print $3/$2 * 100}' | awk -F. '{print $1}')

說明

  • free:顯示內存使用情況

  • awk '/Mem/{print $3/$2 * 100}'$3 是已用內存,$2 是總內存,計算百分比

  • awk -F. '{print $1}':取整數部分

# 根目錄磁盤使用率disk_use=$(df / | awk 'END{print $5}' | sed 's/%//')

說明

  • df /:查看根目錄分區使用情況

  • awk 'END{print $5}':取最后一行(分區行)的第五列(使用率)

  • sed 's/%//':去掉百分號,方便比較


3. Bash 腳本判斷閾值

設置閾值,并將告警信息拼接到變量 ALERT_MSG

CPU_WARNING=80 
MEM_WARNING=80 
DISK_WARNING=80 
ALERT_MSG="" 
# CPU告警判斷
if [ "$cpu_use" -ge "$CPU_WARNING" ]; then 
ALERT_MSG+="CPU使用率:${cpu_use}%超過閾值${CPU_WARNING}%\n" 
fi

說明

  • [ "$cpu_use" -ge "$CPU_WARNING" ]:判斷 CPU 是否大于等于閾值

  • ALERT_MSG+=:追加告警信息

  • \necho -e 輸出時換行

? ? 類似邏輯用于內存和磁盤判斷。


4. 配置 msmtp 發送郵件

4.1 安裝 msmtp

# CentOS/RHEL 
sudo yum install msmtp -y 
# Ubuntu/Debian
sudo apt install msmtp -y 

說明

  • msmtp 是輕量級 SMTP 客戶端

  • 支持管道輸入,將文本內容發送為郵件正文

4.2 創建配置文件 /etc/msmtprc

defaults 
auth on # 開啟認證 
tls on # 開啟 TLS 加密 
tls_trust_file /etc/ssl/certs/ca-bundle.crt # CA 證書路徑 
logfile /var/log/msmtp.log # 日志文件 account qq 
host smtp.qq.com # SMTP 服務器地址 
port 587 # SMTP 端口 
from 3426848201@qq.com # 發件人郵箱 
user 3426848201@qq.com # SMTP 用戶名 
password zqhvzueytjhncjae # SMTP 授權碼 account default : qq # 默認賬戶

說明

  • 日志文件使用絕對路徑,避免 ~ 不被解析

  • 權限必須設置為 600:chmod 600 /etc/msmtprc

  • account default : qq 表示默認發送賬戶


5. 發送郵件

msmtp 需要在郵件內容里寫主題:

if [ -n "$ALERT_MSG" ]; then ( echo "Subject: 服務器資源告警" echo # 空行,分隔郵件頭和正文 echo -e "$ALERT_MSG" # 郵件正文 ) | msmtp "$MAIL_TO" 
fi

說明

  • if [ -n "$ALERT_MSG" ]:僅當有告警信息時發送郵件

  • echo "Subject: ...":郵件主題

  • echo:空行分隔郵件頭和正文

  • echo -e "$ALERT_MSG":輸出正文,支持換行


5.1 給別人發郵件

MAIL_TO="friend@example.com" ( echo "From: 3426848201@qq.com" echo "To: friend@example.com" echo "Subject: 服務器資源告警" echo echo -e "$ALERT_MSG" ) | msmtp -t

說明

  • -t 告訴 msmtp 從郵件頭讀取收件人

  • 可以一次發給多人,用逗號或空格隔開


6. 完整示例腳本

#!/bin/bash
#系統資源監控腳本#配置郵箱信息
MAIL_TO="3426848201@qq.com" #收件人郵箱#郵件標題
TITLE="服務器資源告警"#獲取CPU使用率
cpu_use=$(top -bn1 | grep "Cpu(s)" | awk -F, '{print 100 - $4}' | awk -F. '{print $1}')
#獲取磁盤使用率
disk_use=$(df / | awk 'END{print $5}' | sed 's/%//')
#獲取內存使用率
mem_use=$(free | awk '/Mem/{print $3/$2 * 100}' | awk -F. '{print $1}')#設置告警閾值
CPU_WARNING=1
MEM_WARNING=1
DISK_WARNING=1#用于保存監控信息
ALERT_MSG=""#判斷CPU
if [ "$cpu_use" -ge "$CPU_WARNING" ]; thenALERT_MSG+="CPU使用率:${cpu_use}%超過閾值${CPU_WARNING}%\n"
fi
#判斷內存
if [ "$mem_use" -ge "$MEM_WARNING" ]; thenALERT_MSG+="內存使用率:${mem_use}%超過閾值${MEM_WARNING}%\n"
fi
#判斷磁盤
if [ "$disk_use" -ge "$DISK_WARNING" ]; thenALERT_MSG+="磁盤使用率:${disk_use}%超過閾值${DISK_WARNING}%\n"
fi#如果有告警就發郵件
if [ -n "$ALERT_MSG" ]; then(echo "Subject: $TITLE"echoecho -e "$ALERT_MSG") | msmtp "$MAIL_TO"
fi

7. 測試方法

  1. 將閾值調低,例如 1%,確保告警觸發

  2. 執行腳本:

   sh Cpu內存監控.sh
  1. 檢查收件郵箱,確認主題和正文顯示正確

注意:可使用crontab -e

? ? ?*/5? *? *? *? *? /bin/bash? /path(腳本路徑)/shname.sh(腳本名)

實現全自動監控,如遇執行失敗,請檢查腳本是否有執行權限,沒有可用chmod提權


8. 常見問題解答

問題原因解決方法
收到空郵件$ALERT_MSG 為空,或郵件頭和正文沒有空行確保告警信息非空,郵件頭與正文間加空行
收到無主題郵件msmtp 不會自動加主題在郵件內容第一行寫 Subject:
msmtp: input error配置文件有語法錯誤或使用 ~使用絕對路徑、保持 Unix 換行格式、權限 600
無法發送郵件SMTP 配置錯誤確認 hostportuserpassword 正確,使用授權碼

9. 總結

  • Bash + msmtp 可以實現輕量級系統資源監控郵件告警

  • 郵件頭、主題和正文必須正確,否則收件人可能看到空郵件或無主題

  • 可以擴展支持多收件人、日志記錄和定時任務

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

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

相關文章

設計整體 的 序分(三“釋”)、正宗分(雙“門”)和流通分(統一的通行表達式) 之3 “自明性”(騰訊元寶 之2)

Q&AQ11、可能還需要補充 魂軸、體軸 和 中心軸 并行 上升 的內容Q11.1、我剛才說“可能還需要補充 魂軸、體軸 和 中心軸 并行 上升 的內容” 是指的 我們今天前面討論 得出的整體設計 的一個概念整體 的一個雙螺旋上升結構中的三個軸。 您剛才是這樣 理解的嗎?…

使用Ansible自動化部署Hadoop集群(含源碼)--環境準備

現在我們有5臺虛擬機,已經配置好了主機名和網絡我們的目標是通過Ansible實現自動化部署hadoop集群。在此之前,我們先編寫一個shell腳本來配置hadoop集群的環境,包括安裝軟件、安裝配置Ansible(一個主節點四個工作節點)…

C#海康車牌識別實戰指南帶源碼

C#海康車牌識別實戰指南帶源碼前言車牌識別技術在智能交通、停車場管理等領域有著廣泛的應用。海康威視作為國內領先的安防廠商,其車牌識別相機提供了豐富的SDK接口供開發者使用。本文將詳細介紹如何使用C#語言結合海康威視SDK實現車牌識別功能,并解析關…

智慧能源新范式:數字孿生平臺如何驅動風電場的精細化管理?

摘要你有沒有想過,一座風力發電場背后,藏著一個“看不見的孿生兄弟”?它能提前預知風機故障,實時模擬極端天氣的影響,甚至能“訓練”運維人員在虛擬場景中演練搶修。這就是數字孿生——一個讓風電場從“靠經驗管理”轉…

STM32-FreeRTOS操作系統-任務管理

引言 隨著嵌入式技術的飛速發展,STM32與FreeRTOS的融合愈發緊密。本文聚焦于STM32平臺下FreeRTOS操作系統的任務管理,旨在為開發者提供清晰的思路與實用的技巧,助力高效開發。 為什么要進行任務管理? 在嵌入式系統中,…

工業領域 ACP 協議全解析:從入門到實戰案例

工業領域 ACP 協議全解析:從入門到實戰案例 文章目錄工業領域 ACP 協議全解析:從入門到實戰案例一、前言二、ACP 協議是什么?1. 基本定義2. 與數據傳輸協議的區別三、ACP 協議的核心功能1. 身份認證(Authentication)2.…

計算機組成原理:計算機硬件的基本組成

📌目錄🖥? 計算機硬件的基本組成:從經典到現代的架構演進🧩 一、計算機硬件的五大部分:功能與協同📥 (一)輸入設備:人機交互的“入口”📤 (二&am…

AI歌手功能終于上線!Suno AI 帶你保存歌曲的靈魂

當我們談論一首歌時,究竟是什么讓它“獨一無二”?是主唱的聲音質感?是旋律里的氛圍?還是那種無法復制的風格氣息? 如今,Suno AI 給出了答案—— AI歌手功能正式上線! 🌟什么是「AI…

Dubbo3.3 Triple協議處理東西向流量

前言 Apache Dubbo 3.3 對 Triple 協議做了升級,現在 Dubbo 不僅可以處理東西向流量,也可以處理南北向流量。 **東西向流量(East-West Traffic) ** 指數據中心或網絡內部同級設備/服務之間的通信。例如,微服務之間的…

操作系統核心特點詳解:從并發到分布式,一文搞懂考研必備知識

操作系統核心特點詳解:從并發到分布式,一文搞懂考研必備知識 大家好,今天咱們來聊聊操作系統(OS)這個計算機世界的“大管家”。想象一下,你的電腦就像一個忙碌的廚房,操作系統就是那個廚師長&am…

2025精選5款AI視頻轉文字工具,高效轉錄秒變文字!

視頻轉文本的需求早已滲透到生活的方方面面:網課學習需要提取課件臺詞、會議記錄想快速整理要點、追劇時急需生肉轉字幕…… 手動記錄不僅費時,還容易遺漏關鍵信息。今天就分享5款實用工具,從免費到專業全覆蓋,幾步操作就能讓視頻…

MyBatis Example模式SQL注入風險

在使用MyBatis逆向工程生成的Example查詢模式時,很多開發者看到XML中存在${}占位符就會擔心SQL注入問題。但實際上,存在${}并不等同于存在SQL注入風險。本文將詳細分析何時會存在真正的注入風險。 存在SQL注入的兩個關鍵前提 前提一:Criteria…

寶塔PostgreSQL安裝pgvecto插件contrib包實現向量存儲

1. 寶塔安裝 首先確保你的寶塔已經安裝了 PostgreSQL。 安裝好后是能看到上面這個界面的。 我安裝的是 16.1 版本,下面的教程講的也是 16.1 版本的。 2.開放防火墻的端口號 5432 3.允許外部訪問所有數據庫 4.設置超級管理員用戶密碼 用戶名默認為:po…

麒麟系統 doc轉pdf

# 安裝LibreOffice(如果尚未安裝) sudo apt update sudo apt install libreoffice# 將DOC轉換為PDF libreoffice --headless --convert-to pdf 你的文檔.doc# 或者指定輸出目錄 libreoffice --headless --convert-to pdf --outdir /輸出目錄 你的文檔.do…

Python實現生成矩形框、三角形框、六邊形框和圓環點云

本節我們分享上節提到的不填充點云。在點云處理、計算機視覺與工業檢測中,幾何輪廓(邊框/環)點云比實心點云更能反映物體的邊緣特征、結構骨架與形貌突變區域。Python 借助 NumPy 即可快速生成矩形邊框、三角形邊框、六邊形邊框與圓環點云&am…

2025年本體論:公理與規則的挑戰與趨勢

摘要本文章旨在深入探討本體論(Ontology)中公理(Axioms)與規則(Rules)的核心概念、技術實現、驗證方法、性能評估及其在2025年的前沿趨勢與挑戰。公理與規則是構建嚴謹、一致知識模型的邏輯基石&#xff0c…

【51單片機】【protues仿真】基于51單片機PM2.5空氣質量檢測系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、LCD1602液晶顯示 2、按鍵?設置閾值 3、PM2.5大于閾值時啟動聲光警報 二、使用步驟 基于51單片機的PM2.5空氣質量檢測系統通常采用STC89C51/52作為核心控制器,結合…

【目錄-單選】鴻蒙HarmonyOS開發者基礎

用哪一種裝飾器修飾的組件可作為頁面入口組件?Look at the answer下面是ArkTS中類名、枚舉名推薦的代碼風格是 Look at the answer向服務器提交表單數據,以下哪種請求方式比較合適 Look at the answer使用http發起網絡請求,需要以下哪種權限&…

maven【maven】技術詳解

MavenMaven的本質是項目管理工具,將項目開發和管理過程抽象成一個項目對象模型(POM)Project Object Model:項目對象管理模型作用: 項目構建:提供標準的、跨平臺的自動化項目構建方式依賴管理:方…

【操作系統-Day 25】死鎖 (Deadlock):揭秘多線程編程的“終極殺手”

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…