使用shell腳本編寫監控系統資源(CPU,內存,磁盤)使用情況

?

🏡作者主頁:點擊!?

🛠?Shell編程專欄:點擊!

??創作時間:2024年6月20日16點30分

🀄?文章質量:95分


目錄

————前言————

1.本章目標

2.編寫腳本

1.獲取內存使用率

2.獲取根分區磁盤占用率

3.設置監控閾值

4.檢查CPU使用率

5.檢查內存使用率

6.檢查根分區磁盤使用率

7.測試


————前言————

在現代計算機系統中,確保系統資源的高效利用和及時響應異常情況至關重要。對于系統管理員和開發人員來說,監控CPU、內存和磁盤使用情況是日常維護的核心任務之一。Shell腳本作為一種強大而靈活的工具,能夠幫助我們自動化這些監控任務,實時獲取系統資源使用情況,并在資源使用超過設定閾值時及時發出警報。

1.本章目標

本篇文章將帶領您學習如何編寫一個簡單但功能強大的Shell腳本,用于監控系統的CPU、內存和根分區磁盤的使用情況。當某項資源的使用率超過預設的警戒值時,腳本將自動發送警報郵件通知相關人員。通過本次學習,您將掌握基礎的Shell編程技巧,并能將這些知識應用到實際的系統監控中去。準備好了嗎?讓我們開始探索Shell編程的世界吧!

題目

請編寫一個Shell腳本,用于監控系統的CPU、內存和根分區磁盤的使用情況。該腳本需要在資源使用超過設定的閾值時發送警報郵件。

2.編寫腳本

vim /sysmon.sh

加入一下內容

1.獲取內存使用率

使用 free 命令和 awk 命令計算當前的內存使用率,并將其存儲在變量 mem 中。

mem=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

解釋如下:

  1. free:顯示系統的內存使用情況。
  2. grep Mem:從 free 的輸出中篩選出包含內存信息的那一行。
  3. awk '{print $3/$2 * 100.0}':計算內存使用率,將已用內存除以總內存并乘以100,得到百分比。
  4. mem=$(...):將計算結果存儲在變量 mem 中。

2.獲取根分區磁盤占用率

使用 df -h 命令和 awk 命令獲取根分區(/)的磁盤占用率,并將其存儲在變量 disk 中。

disk=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

解釋如下:

  1. df -h /:顯示根分區(/)的磁盤使用情況。
  2. awk 'NR==2 {print $5}':提取第二行的第五列數據,即根分區的使用率。
  3. sed 's/%//':去掉使用率百分比后的百分號。
  4. disk=$(...):將結果存儲在變量 disk 中。

3.設置監控閾值

定義CPU、內存和磁盤使用率的閾值。分別為80%、90%和90%。

cpuce=80
ncce=90
cpce=90

解釋如下:

  1. cpuce=80:設置CPU使用率警戒線為80%。
  2. ncce=90:設置內存使用率警戒線為90%。
  3. cpce=90:設置根分區磁盤使用率警戒線為90%。
4.檢查CPU使用率

對比CPU使用率與設定的閾值,如果超過80%,則輸出警告信息并發送郵件通知。

if (( $(echo "$cpu >= $cpuce" | bc -l) )); thenecho "CPU占用率超過80% ($cpu%)"echo "CPU占用率超過80%" | mail -s "監控警報" monitor@bdqn.com
elseecho "CPU占用率 $cpu%"
fi

解釋如下:

  • if (( $(echo "$cpu >= $cpuce" | bc -l) )):使用 bc 計算表達式,如果 cpu 大于或等于 cpuce
  • echo "CPU占用率超過80% ($cpu%)":輸出警告信息。
  • echo "CPU占用率超過80%" | mail -s "監控警報" monitor@bdqn.com:發送警報郵件。
  • elseecho "CPU占用率 $cpu%":如果 cpu 低于 cpuce,輸出當前CPU使用率。
5.檢查內存使用率

對比內存使用率與設定的閾值,如果超過90%,則輸出警告信息并發送郵件通知。

if (( $(echo "$mem >= $ncce" | bc -l) )); then
echo "內存使用率超過90% ($mem%)"
echo "內存使用率超過90%" | mail -s "監控警報" monitor@bdqn.com
else
echo "內存使用率 $mem%"
fi

解釋如下:

  • if (( $(echo "$mem >= $ncce" | bc -l) )):使用 bc 計算表達式,如果 mem 大于或等于 ncce
  • echo "內存使用率超過90% ($mem%)":輸出警告信息。
  • echo "內存使用率超過90%" | mail -s "監控警報" monitor@bdqn.com:發送警報郵件。
  • elseecho "內存使用率 $mem%":如果 mem 低于 ncce,輸出當前內存使用率。

6.檢查根分區磁盤使用率

對比根分區磁盤使用率與設定的閾值,如果超過90%,則輸出警告信息并發送郵件通知。

if (( $(echo "$disk >= $cpce" | bc -l) )); then
echo "磁盤使用率超過90% ($disk%)"
echo "磁盤使用率超過90%" | mail -s "監控警報" monitor@bdqn.com
else
echo "磁盤使用率 $disk%"
fi

解釋如下:

  • if (( $(echo "$disk >= $cpce" | bc -l) )):使用 bc 計算表達式,如果 disk 大于或等于 cpce
  • echo "磁盤使用率超過90% ($disk%)":輸出警告信息。
  • echo "磁盤使用率超過90%" | mail -s "監控警報" monitor@bdqn.com:發送警報郵件。
  • elseecho "磁盤使用率 $disk%":如果 disk 低于 cpce,輸出當前磁盤使用率。

7.測試

編寫完成之后執行測試

?"成功的路上沒有捷徑,只有不斷的努力與堅持。如果你和我一樣,堅信努力會帶來回報,請關注我,點個贊,一起迎接更加美好的明天!你的支持是我繼續前行的動力!"

"每一次創作都是一次學習的過程,文章中若有不足之處,還請大家多多包容。你的關注和點贊是對我最大的支持,也歡迎大家提出寶貴的意見和建議,讓我不斷進步。"

神秘泣男子

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

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

相關文章

Java異常處理詳解【入門篇】

Java異常處理詳解【入門篇】 Java異常處理詳解1. 異常的概念2. 異常的分類2.1 檢查異常(Checked Exception)2.2 非檢查異常(Unchecked Exception)2.3 錯誤(Error) 3. 異常處理機制3.1 try-catch3.2 finally…

CesiumJS【Basic】- #025 生成kml/kmz文件

文章目錄 生成kml/kmz文件1 目標2 代碼2.1 main.ts生成kml/kmz文件 1 目標 生成kml/kmz文件(kmz是kml的壓縮格式) 2 代碼 首先添加點線面并且賦予不同的顏色,然后導出生成kml/kmz文件 2.1 main.ts import * as Cesium from "cesium";const viewer = new Ces…

微服務 | Springboot整合GateWay+Nacos實現動態路由

1、簡介 路由轉發 執行過濾器鏈。 ? 網關,旨在為微服務架構提供一種簡單有效的統一的API路由管理方式。同時,基于Filter鏈的方式提供了網關的基本功能,比如:鑒權、流量控制、熔斷、路徑重寫、黑白名單、日志監控等。 基本功能…

YOLO:一種革命性的實時目標檢測算法

目標檢測是計算機視覺領域中的一項基礎任務,它涉及到在圖像或視頻幀中識別和定位多個目標對象。傳統的目標檢測方法,如R-CNN系列算法,雖然在精度上取得了不錯的成績,但它們通常需要多步驟的處理過程,導致檢測速度較慢&…

linux 刪除文件(批量刪除文件)

一般的刪除文件的操作 刪除幾個文件 rm 文件1 文件2 刪除文件夾下面所有文件 rm * -rf 刪除某些固定字母開頭的文件 rm xxx* 刪除一類文件 rm .txt 批量刪除文件 首先查找我們要刪除的某類批量的文件: find . -maxdepth 1 -regex “.ws.” maxdepth參數為1表示只在當…

4054充電芯片經常燒壞?Type-c口的燒壞充電芯片如何去解決

4054是一款常用的鋰電池充電管理芯片,廣泛應用于各種電子設備中。然而,有時候4054會出現經常燒壞的情況,故而讓客戶對我們的產品質量產生的擔憂。特別是現如今快充的時代到來,快充頭的使用,出現了更多4054燒壞的現象。…

php開發的系統/軟件如何實現閉源?

想到這個問題的起因是想找一款更好用的服務器管理軟件, 看到CPanel的介紹“對國際主機市場了解的朋友一定聽說過cPanel,它是世界上功能強大,容易使用,因而比較受用戶歡迎的虛擬主機控制系統。cPanel 是一套在網頁寄存業中最享負盛…

在python docker中安裝ESL庫

概述 功能需求,把python腳本移植到docker中。 因為python腳本中有使用freeswitch的ESL接口,所以需要安裝python-ESL依賴庫。 本文記錄在python:3.10.14-slim的docker鏡像上編譯安裝python-ESL依賴庫的流程。 環境 docker engine: Version 24.0.6 d…

MySQL的三種驅動類型

MySQL 支持多種驅動類型,常見的包括: MySQL Native Driver (mysqlnd): 這是MySQL官方推薦的驅動類型,它是PHP的一個內置擴展。mysqlnd 提供了更高的性能和更好的兼容性,支持MySQL 4.1及以上版本。 MySQL Improved Ext…

在.NET Core中,config和ConfigureServices的區別和作用

在.NET Core中,config和ConfigureServices是兩個不同的概念,它們在應用程序的啟動和配置過程中扮演著不同的角色。 ConfigureServices:這是ASP.NET Core應用程序中的一個方法,位于Startup類的內部。它的作用是配置依賴注入(DI)容器…

湘潭大學概率論總結

文章目錄 前言試卷結構反思第一個填空題某個大題矩估計和最大似然估計算方差最后 前言 自己其實寒假的時候就想學這個了,但是那個時候在acm訓練,就沒有學,但是3月份退隊了,還是沒有學,完全就是自己太拖延的原因&#…

淺談返利app架構設計

淺談返利app架構設計 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們來探討返利App的架構設計,這是一個技術性的話題,我們將深入…

【ES】--Elasticsearch的翻頁詳解

目錄 一、前言二、from+size淺分頁1、from+size導致深度分頁問題三、scroll深分頁1、scroll原理2、scroll可以返回總計數量四、search_after深分頁1、search_after避免深度分頁問題一、前言 ES的分頁常見的主要有三種方式:from+size淺分頁、scroll深分頁、search_after分頁。…

基于Java微信小程序同城家政服務系統設計和實現(源碼+LW+調試文檔+講解等)

💗博主介紹:?全網粉絲10W,CSDN作者、博客專家、全棧領域優質創作者,博客之星、平臺優質作者、專注于Java、小程序技術領域和畢業項目實戰?💗 🌟文末獲取源碼數據庫🌟感興趣的可以先收藏起來,還…

Nginx配置達夢數據庫代理及Nginx模塊內容總結

Nginx 代理達夢數據庫配置 叨叨達夢數據庫代理Nginx模塊說明stream模塊main 全局塊event塊http塊server塊location塊 本文參考了 https://blog.csdn.net/qq_42402854/article/details/132843413 叨叨 由于公司網絡安全問題,應用服務器端開開放需要走策略申請&#…

C#面:舉列 a=10,b=15,在不用第三方變量的前提下,把a,b的值互換

要在不使用第三方變量的前提下交換a和b的值,可以使用異或運算。異或運算的特性是,對于兩個相同的數進行異或運算,結果為0;對于任意數與0進行異或運算,結果為該數本身。因此,可以通過多次異或運算來實現變量…

【Sublime】Sublime Text 中運行終端

Sublime Text 本身并不是一個終端仿真器,可以使用插件來在 Sublime Text 中集成終端功能。最常用的插件之一是“Terminal”。 使用“Terminal”插件在 Sublime Text 中啟動終端 以下是安裝和使用該插件的步驟: 安裝 Package Control: 如果你…

面試突擊:HashMap 源碼詳解

本文已收錄于:https://github.com/danmuking/all-in-one(持續更新) 數據結構 JDK1.8 之前 JDK1.8 之前 HashMap 采用 數組和鏈表 結合的數據結構。如下圖: HashMap 將 key 的 hashCode 經過擾動函數處理過后得到 hash 值&#…

網絡編程客戶端和服務端連接流程

服務器端:socket()-->bind( )-->listen()-->accept()-->read()/write()--->close()socket()//創建套接字 bind()//命名socket,分配套接字地址 listen()//監聽狀態,等待連接請求狀態 accept()//允許連接(被動連接) read()/writ…

java第二十九課 —— 斷點 | 零錢通項目

斷點調試(debug) 實際需求 在開發中,新手程序員在查找錯誤時,這時老程序員就會溫馨提示,可以用斷點調試步一步的看源碼執行的過程,從而發現錯誤所在。 重要提示:在斷點調試過程中,…