十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
建站服務(wù)器
這篇文章將為大家詳細(xì)講解有關(guān)shell編程實戰(zhàn)之如何監(jiān)控磁盤分區(qū)的使用率,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
不知道大家有沒有碰到過磁盤分區(qū)寫滿,導(dǎo)致新數(shù)據(jù)寫入不了,造成網(wǎng)站出現(xiàn)了問題。之前自己有幾次碰到過這種情況,自己當(dāng)時緊急解決辦法是:刪除網(wǎng)站的日志文件,刪除了mysql的binlog日志。
當(dāng)然我們是不希望發(fā)生此類問題的,如果網(wǎng)站總出現(xiàn)不穩(wěn)定或打不開情況,會給用戶一種不靠譜的感覺。所以,對于磁盤分區(qū)的使用,我們需要實時監(jiān)控,當(dāng)超過預(yù)設(shè)值時,就發(fā)送份郵件或短信給管理員,將錯誤扼殺至搖籃里。
對于此腳本的編寫是很簡單的,主要一點(diǎn)就是獲取到磁盤分區(qū)的使用率。我們知道df命令可以列出各個分區(qū)的空間使用情況:
# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 3986648 0 3986648 0% /dev tmpfs 3999984 0 3999984 0% /dev/shm tmpfs 3999984 528 3999456 1% /run tmpfs 3999984 0 3999984 0% /sys/fs/cgroup /dev/vda1 41931756 17576208 24355548 42% / /dev/vdb1 52403200 476572 51926628 1% /data /dev/vdb2 104806400 29255772 75550628 28% /www tmpfs 799996 0 799996 0% /run/user/0 /dev/vdb3 52402180 398576 52003604 1% /mnt
我們可以看到各個分區(qū)的空間使用情況。然后接口grep命令以及awk命令,過濾掉其他信息,只留下各個分區(qū)的使用情況信息。
我們只想得到以/dev/開頭的分區(qū)信息
# df | grep ^/dev /dev/vda1 41931756 17576264 24355492 42% / /dev/vdb1 52403200 476572 51926628 1% /data /dev/vdb2 104806400 29255980 75550420 28% /www /dev/vdb3 52402180 398576 52003604 1% /mnt
然后繼續(xù)使用awk命令過濾不想要的信息
# df | grep ^/dev | awk '{print $1":"$5}' /dev/vda1:42% /dev/vdb1:1% /dev/vdb2:28% /dev/vdb3:1%
拿到各個分區(qū)的使用率后,下面就是對其進(jìn)行循環(huán)遍歷,依次判斷各個分區(qū)的使用情況。
下面給出完成的代碼:
#!/bin/bash # 監(jiān)控分區(qū)的空間使用情況,超過預(yù)設(shè)值告警 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin export LANG=en # 分區(qū)空間使用率閥值 USE_LIM=70 while ((1)) do disks=$( df | grep ^/dev | awk '{print $1":"$5}') for disk in $disks do used=$(echo $disk | cut -d: -f2 | cut -d'%' -f1) if [ "$used" -ge "$USE_LIM" ];then # 調(diào)用告警腳本,這里直接用echo來替代了 echo "$(echo $disk | cut -d: -f1) is used $used%" fi done sleep 10 done
注意:一般我們服務(wù)器上用的語系都是英文的,特別是在編寫shell腳本的時候,建議加上這樣一行
export LANG=en
因為我們是要做實時的監(jiān)控,所以腳本里使用了死循環(huán),表示此腳本不會停會一直循環(huán)執(zhí)行。當(dāng)然,執(zhí)行速度也是要做限制的,不然占用太多服務(wù)器資源就不太好了。所以這里使用了sleep 10,表示10秒監(jiān)控一次。
另外這里還要一點(diǎn)需要注意,就是過濾掉百分號%。這里我們使用了cut命令來過濾掉%,然后拿到純數(shù)字型的分區(qū)使用率和預(yù)設(shè)值做比較。
關(guān)于shell編程實戰(zhàn)之如何監(jiān)控磁盤分區(qū)的使用率就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。