Linux—用于自動(dòng)監(jiān)控磁盤使用情況的 Shell 腳本
如果在服務(wù)器上運(yùn)行關(guān)鍵任務(wù),那么監(jiān)控和通知管理員磁盤使用情況很重要。本文介紹編寫一個(gè)腳本來(lái)自動(dòng)監(jiān)控并在達(dá)到閾值時(shí)將報(bào)告發(fā)送到自己的郵箱。
在文章中,我們寫一個(gè)shell 腳本,它在 crontab中指定固定時(shí)間間隔監(jiān)控磁盤使用情況,并在報(bào)告達(dá)到指定的閾值時(shí)通過(guò)電子郵件發(fā)送報(bào)告。
首先,需要確保系統(tǒng)安裝了mail命令和postfix發(fā)送郵件服務(wù)。下面是在Centos8中安裝的命令:
[root@localhost ~]# yum -y install mailx postfix
[root@localhost ~]# systemctl enable --now postfix
下面使用mail命令發(fā)送郵件測(cè)試:
[root@localhost ~]# echo "This message will go into the body of the mail." | mail -s "Testing from the server." root@localhos
本文不講解如何配置smtp服務(wù)。
測(cè)試磁盤使用情況的腳本
以下是測(cè)試磁盤使用情況并將報(bào)告發(fā)送到指定郵箱的腳本。腳本的解釋在代碼片段之后給出。
[root@localhost ~]# vim disk-monitor.sh
#!/bin/bash
MAILID="admin@linuxprobe.com"
VALUE=80
SERVERNAME=$(hostname)
MAIL=/bin/mail
for line in $(df -hP | egrep '^/dev/' | awk '{ print $1 "_:_" $5 }')
do
FILESYSTEM=$(echo "$line" | awk -F"_:_" '{ print $1 }')
DISK_USAGE=$(echo "$line" | awk -F"_:_" '{ print $2 }' | cut -d'%' -f1 )
if [ $DISK_USAGE -ge $VALUE ];
then
EMAIL="$SERVERNAME - $(date): $FILESYSTEM Exceeded the threshold VALUE\n"
EMAIL="$EMAIL\n Usage Details\n Current Usage:($DISK_USAGE%) Threshold value: ($VALUE%)"
echo -e "$EMAIL" | $MAIL -s ""$SERVERNAME" Disk Usage Alert: Needs Attention!" "$MAILID"
elif [ $DISK_USAGE -lt $VALUE ];
then
EMAIL="$EMAIL\n$FILESYSTEM ($DISK_USAGE%) is lessthan the threshold ($VALUE%)"
EMAIL="$EMAIL\n"
echo -e "$EMAIL" | $MAIL -s ""$SERVERNAME" Disk Usage Alert: Threshold Not Reached" "$MAILID"
fi
done
監(jiān)控腳本說(shuō)明
上述腳本使用df -hP命令獲取內(nèi)存信息。
環(huán)境變量MAILID保存必須在其中發(fā)送報(bào)告的郵箱地址。VALUE 保存要設(shè)置的閾值。SERVERNAME保存服務(wù)器的主機(jī)名,用于電子郵件通知中的服務(wù)器標(biāo)識(shí)。使用 for循環(huán),它將遍歷所有具有“/dev”掛載點(diǎn)的文件系統(tǒng)。然后它將文件系統(tǒng)名稱和磁盤使用百分比保存到兩個(gè)變量FILESYSTEM 和
DISK_USAGE。使用上述變量,磁盤使用量等于閾值 VALUE 變量。根據(jù)結(jié)果,將向指定的郵箱發(fā)送一封電子郵件。
監(jiān)控腳本執(zhí)行
下面需要修改一下disk-monitor.sh腳本的權(quán)限,為它添加可執(zhí)行權(quán)限:
[root@localhost ~]# chmod +x disk-monitor.s
使用下面方式運(yùn)行腳本:
[root@localhost ~]# ./disk-monitor.s
自動(dòng)化監(jiān)控過(guò)程
手動(dòng)運(yùn)行腳本沒(méi)有任何意義,因?yàn)槲覀兿M詣?dòng)運(yùn)行該過(guò)程。自動(dòng)運(yùn)行該過(guò)程的最佳方法是將腳本添加到 crontab配置文件中。
使用下面方式打開crontab:
[root@localhost ~]# crontab -
將下面內(nèi)容添加到配置文件中: */5 * * * * sh /home/ec2-user/disk-monitor.sh