Linux—用于自動監(jiān)控磁盤使用情況的 Shell 腳本
如果在服務器上運行關鍵任務,那么監(jiān)控和通知管理員磁盤使用情況很重要。本文介紹編寫一個腳本來自動監(jiān)控并在達到閾值時將報告發(fā)送到自己的郵箱。
在文章中,我們寫一個shell 腳本,它在 crontab中指定固定時間間隔監(jiān)控磁盤使用情況,并在報告達到指定的閾值時通過電子郵件發(fā)送報告。
首先,需要確保系統(tǒng)安裝了mail命令和postfix發(fā)送郵件服務。下面是在Centos8中安裝的命令:
[root@localhost ~]# yum -y install mailx postfix
[root@localhost ~]# systemctl enable --now postfix
下面使用mail命令發(fā)送郵件測試:
[root@localhost ~]# echo "This message will go into the body of the mail." | mail -s "Testing from the server." root@localhos
本文不講解如何配置smtp服務。
測試磁盤使用情況的腳本
以下是測試磁盤使用情況并將報告發(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)控腳本說明
上述腳本使用df -hP命令獲取內存信息。
環(huán)境變量MAILID保存必須在其中發(fā)送報告的郵箱地址。VALUE 保存要設置的閾值。SERVERNAME保存服務器的主機名,用于電子郵件通知中的服務器標識。使用 for循環(huán),它將遍歷所有具有“/dev”掛載點的文件系統(tǒng)。然后它將文件系統(tǒng)名稱和磁盤使用百分比保存到兩個變量FILESYSTEM 和
DISK_USAGE。使用上述變量,磁盤使用量等于閾值 VALUE 變量。根據(jù)結果,將向指定的郵箱發(fā)送一封電子郵件。
監(jiān)控腳本執(zhí)行
下面需要修改一下disk-monitor.sh腳本的權限,為它添加可執(zhí)行權限:
[root@localhost ~]# chmod +x disk-monitor.s
使用下面方式運行腳本:
[root@localhost ~]# ./disk-monitor.s
自動化監(jiān)控過程
手動運行腳本沒有任何意義,因為我們希望自動運行該過程。自動運行該過程的最佳方法是將腳本添加到 crontab配置文件中。
使用下面方式打開crontab:
[root@localhost ~]# crontab -
將下面內容添加到配置文件中: */5 * * * * sh /home/ec2-user/disk-monitor.sh