自動排程檢查 Linux 磁碟空間並發送郵件警告通知

最近小編為了公司其中一台年代久遠空間不是很夠的郵件主機搞得頭很大,由於最近疫情的關係,透過郵件與廠商、客戶的溝通需求大增,尤其是在製造業、面板業的企業,常常寄送檔案很大的附加檔案稀鬆平常!相對地對於這個又老容量又小的 Linex 系統主機負擔就很大了,最可怕的就是突然磁碟空間已滿,接踵而來的就是同事間瘋狂地打電話 … 

先不論要怎麼解決空間小的問題(因為這個牽扯到硬體規劃的部份,以後待小編把整個解決方案規劃好在另闢文分享),決定要用個方式檢查 Linex 系統裡各個磁碟空間大小,發現不足時提前通知小編盡快處理空間不足的問題。
系統環境:CentOS Linux release 5.2 (Final)
操作介面:Postfix-2.5.2-1 + ExtMan-0.2.5

小編寫了一個 Shell script 腳本名為 SpaceAlert.sh,並設定排程自動執行,固定時間自動檢查各 FileSystem 剩餘空間,若低於空間在設定指數下,便發送通知給指定的郵箱。程式碼的參數簡單說明一下,按照你的需求修改(可別直接照抄耶,不然我會一直收到你們家的通知):
※  ADMIN:你要指定發送 Mail的對象。
※  ALERT:設定偵測空間使用達多少指數,小編就設定超過 90% 就啟動通知。
※  ExceptionalPartition:指定不需要檢查的 FileSystem,如小編只要檢查「/(/dev/sda1)」和「/var/spool/MarlScanner(/dev/sdc1)」這兩個 FileSystem,那麼其他的就直接設定上去即可。

其他的部分直接 Copy 不需要修改,儲存離開後,直接下 crontab -e 給與你要檢查的時間點,每日、每小時、每分鐘皆可,按您需求和主機狀況設定。

ADMIN="chad680227@gmail.com"

# 設定空間使用達90%通知
ALERT=90

#定出不需要檢查的FileSystem,中間用「|」隔開,以下為不檢查/dev/sda1及/dev/sda2
ExceptionalPartition="/dev/sdb1|/dev/sdb2"

#因df -H第一列是TITLE,所以awk完後使用grep -v 'Use%'過濾掉第一列TITLE列
df  -H | grep -vE $ExceptionalPartition | awk '{ print $5 " " $1 }' | grep -v 'Use%' | while read output;
do
      usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
      partition=$(echo $output | awk '{ print $2 }' )
      if [ $usep -ge $ALERT ]; then
            echo -ne "SOS! SOS! SOS! \n out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" | mail -s "Warning: out of disk space $usep %" $ADMIN
      fi
done

小編設定每 15 分鐘檢查各 FileSystem 剩餘空間,使用空間達 90% 以上,便發送通知給小編的郵箱,然後就像下面的通知信就會一直發一直發,發到你空間不足問題解決為止!小小分享並筆記一下,怕下次需要又忘了。

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料