1. 程式人生 > >檢測所有磁盤分區使用率和inode使用率,當發現某分區容量或者inode量大於85%時,發郵件通知你

檢測所有磁盤分區使用率和inode使用率,當發現某分區容量或者inode量大於85%時,發郵件通知你

去重復 als 情況下 匯總 追加 含義 date 沒有 var


寫一個shell腳本,檢測所有磁盤分區使用率和inode使用率並記錄到以當天日期為命名的日誌文件裏,當發現某個分區容量或者inode使用量大於85%時,發郵件通知你自己。

思路:1、就是先df -h 然後過濾出已使用的那一列,然後再想辦法過濾出百分比的整數部分,然後和85去比較,同理,inode也是一樣的思路。

2、df -h、df -i 記錄磁盤分區使用率和inode使用率,date +%F 日誌名格式
3、取出使用率(第5列)百分比序列,for循環逐一與85比較,大於85則記錄到新文件裏,當for循環結束後,匯總超過85的一並發送郵件



#!/bin/bash
[ ! -d /var/log/disk/ ] && mkdir -p /var/log/disk/
log=/var/log/disk/`date +%F`.log
date +'%F %T' > $log
df -h >> $log
echo >> $log
df -i >> $log
for i in `df -h | grep -v 'Use%'|sed 's/%//'|awk '{print $5}'|sort -u`
do
    if [ $i -lt 85 ]
    then
       use=`df -h|grep -v 'Use%'|sed 's/%//'|awk '$5=='$i' {print $1,$5}'`
       echo "$use" >> use
    fi
done
    if [ -e use ]
    then
    ca=`cat use`
    ##這裏可以使用之前介紹的mail.py
    python mail.py [email protected] "Filesystem Use% check" "$ca"
    rm -rf use
    fi
for j in `df -i|grep -v 'IUse%'|sed 's/%//'|awk '{print $5}'|sort -u`
do
    if [ $j -lt 85 ]
    then
       iuse=`df -i|grep -v 'IUsed%' |sed 's/%//'|awk '$5=='$j' {print $1,$5}'`
       echo "$iuse" >> iuse
    fi
done

if [ -e iuse ]
then
        ct=`cat iuse`
    python mail.py [email protected] "Filesystem iUse% check" "$ct"
     rm -rf iuse
fi

解析:

[ ! -d /var/log/disk ] && mkdir -p /var/log/disk/ 判斷如果/var/log/disk/不是目錄則創建/var/log/disk/目錄,[ -d filename ]為文件比較運算符號,解釋為,如果filename為目錄則為真,加!為非。

date+ '%F %T' 為打印日期和時間。

df -h查看磁盤使用情況

df -h >> $log 將標準輸出追加到$log中。

df -i 查看inode使用情況

grep -v將不符合的行打印

sed 's/%//'將%替換為空

awk '{print $5}'打印第五列

sort -u去重復

for循環這一段表達的含義是:

使用grep sed awk等過濾出df -h輸出結果的整數部分,再使用if判斷將這些數與85比較,大於等於85的,將df -h的第一列和第五列追加到use文件中

使用if判斷,use文件是否存在,([ -e filename ]filename是否存在,如果存在則為真)。如果use文件存在,則發一封郵件,郵件內容為使用量超過85%的磁盤名和數值(即use文件的內容,這裏將use文件的內容賦值給變量$ca),郵件腳本為mail.py,可以參考本人郵件博客的內容

rm 刪除use文件,fi判斷結束。

第二個for同上含義

此腳本正確運行前提:

該系統沒有邏輯卷的情況下使用,因為邏輯卷df -h、df -i 時,使用率百分比是在第4列,而不是第5列。如有邏輯卷,則會漏統計邏輯卷使用情況。

檢測所有磁盤分區使用率和inode使用率,當發現某分區容量或者inode量大於85%時,發郵件通知你