Linux系統運維腳本:編寫bash腳本程序監控服務器的磁盤空間,在磁盤使用率超過閾值時發送警告郵件

目? ? ? ? ? ? ? 錄

一、要求

二、解決方案

(一)解決思路

(二)方案

三、腳本程序實現

(一)腳本代碼和解釋

1、腳本代碼

2、代碼解釋

(二)腳本驗證

1、腳本編輯

2、給予執行權限

3、運行腳本,查看效果

四、擴展


一、要求

????????linux系統正常運行的過程中,一些應用程序會不斷的產生日志和緩存等文件,這些數據一直會累加,占用硬盤空間。隨著時間的推移,可能會占用大部分的磁盤空間,甚至占滿。這樣,可能導致業務程序運行出現異常、甚至導致有的業務程序停止運行。那么如何預防這種情況呢?

二、解決方案

(一)解決思路

????????檢測硬盤空間,可以采用df命令;然后通過shell命令,找到磁盤的空間占用率。發現空間快要滿的時候,可以通過mail發出告警消息。通過這些命令,編一個bash的腳本文件,就可以實現需求。

(二)方案

?????? (1)通過ifconfig得到本機IP地址,或者hostname獲取本機名稱。

?????? (2)通過df、grep、awk等命令,獲得硬盤的占有率

?????? (3)判斷硬盤空間占用是否達到警戒線,比如80%

?????? (4)若超過80%,通過mail命令,發送email給維護人員。

三、腳本程序實現

????????直接把腳本寫出來,分享給大家。

(一)腳本代碼和解釋

1、腳本代碼

????????如下為編寫的bash代碼:

#!/bin/bash
#monitor available disk space
#提取本服務器的IP地址信息
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
SPACE=$(df -hP | grep '/$' | awk '{print int($5)}')
if [ $SPACE -ge 80 ]
then
echo "$IP 服務器磁盤空間使率已經超過80%,請及時處理。"|mail -s "$IP 服務器硬盤告警" 124957736@qq.com
fi
echo "SPACE value: $SPACE"

2、代碼解釋

????????腳本的主要目的是監控服務器的磁盤空間使用情況,并在磁盤空間使用率超過80%時發送警告郵件。以下是腳本的詳細解釋:

(1)#!/bin/bash

????????這用于指示系統使用哪個解釋器來執行此腳本。在這里,它告訴系統使用/bin/bash來執行此腳本。

(2)IP=ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`

?????? 這行命令用于獲取eth0網絡接口的IP地址。

?????? ifconfig eth0:顯示eth0網絡接口的配置信息。

?????? grep "inet addr":從ifconfig的輸出中篩選出包含“inet addr”的行。

?????? cut -f 2 -d ":":以冒號:為分隔符,提取第二個字段,這通常是IP地址前的部分,如inet addr:192.168.1.100中的192.168.1.100。

?????? cut -f 1 -d " ":以空格為分隔符,提取第一個字段,即IP地址本身。

?????? 最終,IP變量將包含eth0網絡接口的IP地址。

(3)SPACE=$(df -hP | grep '/$' | awk '{print int($5)}')

?????? 這行命令用于獲取根分區的磁盤空間使用率。

?????? df -hP:顯示磁盤空間的使用情況,-h參數表示以人類可讀的格式顯示,-P參數表示以POSIX格式顯示。

?????? grep '/$':篩選出以/結尾的行,這通常是根分區的行。

?????? awk '{print int($5)}':使用awk工具從df的輸出中提取第五列,即磁盤的使用率,并將其轉換為整數。

?????? 最終,SPACE變量將包含根分區的磁盤空間使用率(整數形式)。

(4)if [ $SPACE -ge 80 ]

?????? 這是一個條件判斷語句,檢查SPACE變量的值是否大于或等于80。

(5)then

?????? 如果上述條件為真(即磁盤使用率超過80%),則執行接下來的代碼塊。

(6)echo "$IP 服務器磁盤空間使率已經超過80%,請盡快及時處理。"|mail -s "$IP 服務器硬盤超過警戒告警" 124957736@qq.com

?????? 這行命令發送一封警告郵件。郵件的內容包括服務器的IP地址和一條消息,指出服務器的磁盤空間使用率已經超過80%,需要及時處理。郵件的收件人是 124957736@qq.com,郵件的標題是$IP 服務器硬盤告警。

(7)fi

?????? 結束if條件語句。

(8)echo "SPACE value: $SPACE"

?????? 這行命令在終端上顯示SPACE變量的值,即根分區的磁盤空間使用率。

(二)腳本驗證

1、腳本編輯

??????? 使用編輯器,比如vi,把代碼輸入進去;

??????? 保存這個腳本到一個文件中,比check_space.sh

2、給予執行權限

????? chmod +x w check_space.sh

3、運行腳本,查看效果

????????可以運行這個腳本來檢查進程的運行情況,如下:

[121yunwei@ecs-52a1 home]$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs         3961580        0   3961580   0% /dev
tmpfs            3976852        0   3976852   0% /dev/shm
tmpfs            3976852   401964   3574888  11% /run
tmpfs            3976852        0   3976852   0% /sys/fs/cgroup
/dev/vda1      102948772 86067012  12251796  88% /
tmpfs             795368        0    795368   0% /run/user/1003
[121yunwei@ecs-52a1 home]$
[121yunwei@ecs-52a1 home]$
[121yunwei@ecs-52a1 home]$ sh check_space.sh服務器磁盤空間使率已經超過80%,請及時處理。
SPACE value: 88
[121yunwei@ecs-52a1 home]$ 
[121yunwei@ecs-52a1 home]$

四、擴展

? ? ? ? 在實際使用中,系統硬盤可能有多個,你可能可以需要更改檢測的硬盤,以及調整告警閾值,你可稍微做些修改,就可以適合您的應用了。比如,設對應的硬盤的空間閾值,并把80%的閾值改成90%,你可以更改如下兩行命令即可:

SPACE=$(df -hP | grep '/run$' | awk '{print int($5)}')

?if [ $SPACE -ge 90 ]

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

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

相關文章

使用遞歸求解數組最大值(c++題解)

題目描述 輸入一個整數n(n不大于1000),接下來分別為n個整數,請使用遞歸求取最大值。 輸入格式 第一行:正整數n。 第二行:n個整數。 輸出格式 輸出最大值 樣例 樣例輸入 復制2 1 2樣例輸出 復制2 …

Postman: 前端必備工具還是后端獨享利器

Postman 的使用場景:適用于前端和后端 Postman 是一個流行的 API 測試與開發工具。它被廣泛地應用在前后端開發的過程中,但是很多人對于它的使用場景存在疑惑。那么,到底是前端用還是后端用呢?本文將從多個角度詳細解答這個問題。…

Node.js_基礎知識(CommonJS模塊化)

CommonJS模塊化規范 加載時機: 服務器端: 模塊的加載是運行時同步加載的,node.js實現了模塊化規范瀏覽器端: 模塊需要提前編譯打包處理,需使用Browserify編譯打包,推薦使用ESM 暴露模塊:module.exports、exports導入模…

“а”搭配使用更地道,柯橋外貿俄語培訓

1、а именно 就是說,就是,正是 例: в то время, а именно год назад. 那時, 也就是一年前。 не кто иной, а именно г-н Ван. 不是別人,就是王先生 2、а наоборот …

【嵌入式——QT】QListWidget

QListWidget類提供了一個基于項的列表小部件,QListWidgetItem是列表中的項,該篇文章中涉及到的功能有添加列表項,插入列表項,刪除列表項,清空列表,向上移動列表項,向下移動列表項。 常用API a…

C語言數據結構基礎——雙鏈表專題

前言 書接上回,雙鏈表便是集齊帶頭、雙向、循環等幾乎所有元素的單鏈表PLUS. 1.初始化、創建雙鏈表 typedef int LTDataType; typedef struct LTNode {LTDataType data;struct LTNode* next;struct LTNode* prev; }LTNode; 不同于單鏈表,此時每個節點應…

selenium初始學習--打開新標簽操作

selenium 打開新標簽操作 簡單說一下使用 環境 :python 3.9 selenium 4,18 初始化操作 目的 打開bilibilie網站并搜索視頻(電影) 并點擊觀看 操作 打開應用并搜索網址 from selenium import webdriver import timefrom selenium.webdr…

PySide6+VSCode Python可視化環境搭建

#記住在cmd中運行,不要在vscode里運行,否則env會裝到工程目錄下 python -m venv env #env\Scripts\activate.bat pip install pyside6 下載本期源碼 vscode裝一個PYQT Integration插件,設置好兩個路徑(下面有個腳本用于獲取路徑&…

MySQL 數據庫表設計和優化

一、數據結構設計 正確的數據結構設計對數據庫的性能是非常重要的。 在設計數據表時,盡量遵循一下幾點: 將數據分解為合適的表,每個表都應該有清晰定義的目的,避免將過多的數據存儲在單個表中。使用適當的數據類型來存儲數據&…

2020小學甲組--恢復數組

題目描述 有一個數組a[1..n]&#xff0c;但是這個數組的內容丟失了&#xff0c;你要嘗試恢復它。已知以下的三個事實&#xff1a; 1、對于1<i<n&#xff0c;都有a[i]>0&#xff0c;且所有的a[i]互不相同。即a數組保存的全部都是正整數&#xff0c;且互不相同。 2、…

挑戰杯 基于機器視覺的車道線檢測

文章目錄 1 前言2 先上成果3 車道線4 問題抽象(建立模型)5 幀掩碼(Frame Mask)6 車道檢測的圖像預處理7 圖像閾值化8 霍夫線變換9 實現車道檢測9.1 幀掩碼創建9.2 圖像預處理9.2.1 圖像閾值化9.2.2 霍夫線變換 最后 1 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分…

范偉:你們怎么老提1,200呢,有什么典故啊?趙本山:沒有啊!

范偉&#xff1a;你們怎么老提1,200呢,有什么典故啊?趙本山&#xff1a;沒有啊&#xff01; --小品《面子》&#xff08;中3&#xff09;的臺詞 表演者&#xff1a;趙本山 高秀敏 范偉 &#xff08;接上&#xff09; 范偉&#xff1a;哎吃啊 趙&#xff1a;哎呀這電視看的挺…

Acwing枚舉、模擬與排序(一)

連號區間數 原題鏈接&#xff1a;https://www.acwing.com/problem/content/1212/ 初始最小值和最大值的依據是題目給出的數據范圍。只要在數據范圍之外就可以。 連號的時候&#xff0c;相鄰元素元素之間&#xff0c;差值為1。那么區間右邊界和左邊界&#xff0c;的值的差&#…

cAdvisor+Prometheus+Grafana 搞定Docker容器監控平臺

cAdvisorPrometheusGrafana cAdvisorPrometheusGrafana 搞定Docker容器監控平臺1、先給虛擬機上傳cadvisor2、What is Prometheus?2.1、架構圖 3、利用docker安裝普羅米修斯4、安裝grafana cAdvisorPrometheusGrafana 搞定Docker容器監控平臺 1、先給虛擬機上傳cadvisor cAd…

MySQL事務和鎖機制

MySQL技術——事務和鎖機制 一、事務&#xff08;1&#xff09;概述&#xff08;2&#xff09;ACID特性&#xff08;3&#xff09;事務并發存在的問題&#xff08;4&#xff09;事務的隔離級別 二、鎖機制&#xff08;1&#xff09;鎖的力度&#xff08;2&#xff09;表的分類&…

網絡編程-編碼與解碼(Protobuf)

編碼與解碼 下面的文字都來自于極客時間 為什么要編解碼呢&#xff1f;因為計算機數據傳輸的是二進制的字節數據 解碼&#xff1a;字節數據 --> 字符串&#xff08;字符數據&#xff09; 編碼&#xff1a;字符串&#xff08;字符數據&#xff09;–> 字節數據 我們在編…

Python 實現海康機器人工業相機 MV-CS050-10GC 的實時顯示視頻流及拍照功能(實時顯示視頻流同時可以進行拍照)

參考鏈接&#xff1a; https://www.cnblogs.com/HanYork/p/17388506.html https://www.cnblogs.com/miracle-luna/p/16960556.html#5138211 Flask搭建流媒體服務器&#xff1a;使用Flask搭建一個流媒體服務器_multipart/x-mixed-replace; boundaryframe-CSDN博客

公共字段自動填充

在開發中經常面臨對于一些公共字段的賦值。 如在下表中&#xff1a; 如何讓程序自動為我們需要賦值的公共字段進行賦值&#xff0c;避免在業務代碼中重復寫這些公共字段的賦值代碼 如下圖所示&#xff1a; 實現思路&#xff1a; 1.自定義注解AutoFill&#xff0c;用于標識需…

linux環境安裝cuda toolkit

1 全新安裝 如果環境中沒安裝過cuda版本&#xff0c; 這種情況下比較簡單。 直接在https://developer.nvidia.com/cuda-toolkit-archive選擇對應版本下載安裝即可。 如下為安裝cuda toolkit 11.8. 2 環境中已經存在其他版本 這種情況下比較復雜一些。 首先要確認最高支持的…

李沐動手學習深度學習——4.2練習

1. 在所有其他參數保持不變的情況下&#xff0c;更改超參數num_hiddens的值&#xff0c;并查看此超參數的變化對結果有何影響。確定此超參數的最佳值。 通過改變隱藏層的數量&#xff0c;導致就是函數擬合復雜度下降&#xff0c;隱藏層過多可能導致過擬合&#xff0c;而過少導…