最近Linux服務器磁盤使用量經常到100%,直到影響到正常服務出現故障纔會去注意,做不到防患於未然,今天在網上搜集了資料,加上自己修改,寫了一個shell腳本用於實時監控磁盤使用量並在超過閥值後自動發送報警郵件。
腳本簡單說明:用df命令查看磁盤使用量信息,超過腳本設置的閥值(critical=90)90%,就會自動用sendEmail命令發送報警郵件(郵件smtp、email等需自行修改成真實存在的)。
1、首先下載監測腳本(點擊下載)或直接複製下面腳本代碼存爲disk_check.sh文件
#!/bin/bash partition_list=(`df -h | awk 'NF>3&&NR>1{sub(/%/,"",$(NF-1));print $NF,$(NF-1)}'`) critical=90 notification_email() { emailuser='[email protected]' emailpasswd='password' emailsmtp='smtp.domain.com' sendto='[email protected]' title='Disk Space Alarm' /opt/sendEmail-v1.56/sendEmail -f $emailuser -t $sendto -s $emailsmtp -u $title -xu $emailuser -xp $emailpasswd } crit_info="" for (( i=0;i<${#partition_list[@]};i+=2 )) do if [ "${partition_list[((i+1))]}" -lt "$critical" ];then echo "OK! ${partition_list[i]} used ${partition_list[((i+1))]}%" else if [ "${partition_list[((i+1))]}" -gt "$critical" ];then crit_info=$crit_info"Warning!!! ${partition_list[i]} used ${partition_list[((i+1))]}%\n" fi fi done if [ "$crit_info" != "" ];then echo -e $crit_info | notification_email fi
2、上傳disk_check.sh文件到linux服務器的/opt目錄下
3、給disk_check.sh添加可執行權限
[root@localhost /]# chmod 755 /opt/disk_check.sh
4、下載sendEmail郵件程序命令(點擊下載),上傳到服務器的/opt目錄下
5、解壓/opt/sendEmail-v1.56.tar.gz
[root@localhost /]# tar xvf /opt/sendEmail-v1.56.tar.gz
6、測試腳本/報警郵件是否運行正常,可以看到,有2個分區是正常的,顯示OK!,沒有超過設置的閥值,有一個分區使用量超過閥值了,並自動成功發送了報警郵件,再去我設置的收件郵箱,可以看到已經收到了這封報警郵件:
[root@localhost /]# sh /opt/disk_check.sh OK! /dev/shm used 1% OK! /boot used 12% Reading message body from STDIN because the '-m' option was not used. If you are manually typing in a message: - First line must be received within 60 seconds. - End manual input with a CTRL-D on its own line. Jul 01 17:32:44 localhost sendEmail[5585]: Message input complete. Jul 01 17:32:44 localhost sendEmail[5585]: Email was sent successfully!
7、最後,可以設置一個cron計劃任務,讓該腳本每隔1小時運行一次
[root@webmail /]# crontab -e
在cron裏添加下面一行即可
*/60 * * * * /opt/disk_check.sh