下面是用于檢測硬盤空間并在使用量達到80%時發送郵件的Shell腳本
第一步 編寫腳本
#!/bin/bash# 郵件配置
recipient="zhaoqingyou@99qhzt.com"
subject="磁盤空間警報"
mail_cmd="/usr/bin/mail" # 根據實際郵件命令路徑修改# 檢查是否安裝郵件工具
if [ ! -f "$mail_cmd" ]; thenecho "錯誤:郵件發送工具未安裝,請先執行以下命令安裝:"echo "Debian/Ubuntu: sudo apt-get install mailutils"echo "CentOS/RHEL: sudo yum install mailx"exit 1
fi# 獲取所有磁盤分區信息
df -h | while read -r line; do# 跳過標題行和臨時文件系統if [[ $line == Filesystem* ]] || [[ $line == *tmpfs* ]]; thencontinuefi# 提取使用百分比(去掉%符號)usage=$(echo $line | awk '{print $5}' | tr -d '%')mount_point=$(echo $line | awk '{print $6}')# 判斷使用率是否超過80%if [ "$usage" -ge 80 ]; then# 獲取完整磁盤信息disk_info=$(df -h $mount_point)# 構造郵件內容message="警告:磁盤空間使用超過閾值!詳細信息:$disk_info請及時清理磁盤空間!服務器:$(hostname)檢測時間:$(date +"%Y-%m-%d %H:%M:%S")"# 發送郵件echo "$message" | $mail_cmd -s "$subject" $recipientecho "[$(date +'%Y-%m-%d %H:%M:%S')] 已發送警報郵件:$mount_point 使用率 ${usage}%"fi
done
第二步 使用方法
- 保存腳本為
disk_monitor.sh
- 賦予執行權限:
chmod +x disk_monitor.sh
- 配置郵件系統(以Ubuntu為例):
sudo apt-get install mailutils sudo dpkg-reconfigure postfix # 選擇Internet Site,其他保持默認
- 測試腳本:
./disk_monitor.sh
設置定時任務(每天檢查):
crontab -e
添加以下內容(每天8點檢查):
0 8 * * * /path/to/disk_monitor.sh
關鍵功能說明:
df -h
:獲取人類可讀的磁盤使用信息awk '{print $5}'
:提取使用百分比列tr -d '%'
:移除百分號用于數值比較mail
命令:發送郵件的核心工具- 自動過濾tmpfs等臨時文件系統
- 包含詳細磁盤信息和服務器標識
第三步 增強功能建議
-
多閾值分級報警:
if [ "$usage" -ge 90 ]; thensubject="緊急!磁盤空間警報" elif [ "$usage" -ge 80 ]; thensubject="警告!磁盤空間警報" fi
-
添加日志記錄:
log_file="/var/log/disk_monitor.log" echo "[$(date +'%Y-%m-%d %H:%M:%S')] $mount_point 使用率 ${usage}%" >> $log_file
-
排除特定掛載點(如NFS):
if [[ $mount_point == /nfs* ]]; thencontinue fi
最后 注意事項
- 確保
mail
命令路徑正確(使用which mail
查看) - 測試時可將閾值臨時改為50%方便驗證
- 生產環境建議使用企業級監控系統(如Zabbix、Prometheus)運維人員和公司資金到位的情況下