目? ? ? ? ? ? ? 錄
一、要求
二、解決方案
(一)解決思路
(二)方案
三、腳本程序實現
(一)腳本代碼和解釋
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 ]