您的位置:首页 > Web前端 > Node.js

检测所有磁盘分区使用率和inode使用率,当发现某分区容量或者inode量大于85%时,发邮件通知你

2018-02-09 22:06 465 查看
写一个shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期为命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时,发邮件通知你自己。
思路:1、就是先df -h 然后过滤出已使用的那一列,然后再想办法过滤出百分比的整数部分,然后和85去比较,同理,inode也是一样的思路。
2、df -h、df -i 记录磁盘分区使用率和inode使用率,date +%F 日志名格式
3、取出使用率(第5列)百分比序列,for循环逐一与85比较,大于85则记录到新文件里,当for循环结束后,汇总超过85的一并发送邮件

#!/bin/bash
[ ! -d /var/log/disk/ ] && mkdir -p /var/log/disk/
log=/var/log/disk/`date +%F`.log
date +'%F %T' > $log
df -h >> $log
echo >> $log
df -i >> $log
for i in `df -h | grep -v 'Use%'|sed 's/%//'|awk '{print $5}'|sort -u`
do
if [ $i -lt 85 ]
then
use=`df -h|grep -v 'Use%'|sed 's/%//'|awk '$5=='$i' {print $1,$5}'`
echo "$use" >> use
fi
done
if [ -e use ]
then
ca=`cat use`
##这里可以使用之前介绍的mail.py
python mail.py 360347364@qq.com "Filesystem Use% check" "$ca"
rm -rf use
fi
for j in `df -i|grep -v 'IUse%'|sed 's/%//'|awk '{print $5}'|sort -u`
do
if [ $j -lt 85 ]
then
iuse=`df -i|grep -v 'IUsed%' |sed 's/%//'|awk '$5=='$j' {print $1,$5}'`
echo "$iuse" >> iuse
fi
done

if [ -e iuse ]
then
ct=`cat iuse`
python mail.py 360347364@qq.com "Filesystem iUse% check" "$ct"
rm -rf iuse
fi
解析:
[ ! -d /var/log/disk ] && mkdir -p /var/log/disk/ 判断如果/var/log/disk/不是目录则创建/var/log/disk/目录,[ -d filename ]为文件比较运算符号,解释为,如果filename为目录则为真,加!为非。

date+ '%F %T' 为打印日期和时间。

df -h查看磁盘使用情况

df -h >> $log 将标准输出追加到$log中。

df -i 查看inode使用情况

grep -v将不符合的行打印

sed 's/%//'将%替换为空

awk '{print $5}'打印第五列

sort -u去重复

for循环这一段表达的含义是:
使用grep sed awk等过滤出df -h输出结果的整数部分,再使用if判断将这些数与85比较,大于等于85的,将df -h的第一列和第五列追加到use文件中
使用if判断,use文件是否存在,([ -e filename ]filename是否存在,如果存在则为真)。如果use文件存在,则发一封邮件,邮件内容为使用量超过85%的磁盘名和数值(即use文件的内容,这里将use文件的内容赋值给变量$ca),邮件脚本为mail.py,可以参考本人邮件博客的内容

rm 删除use文件,fi判断结束。
第二个for同上含义
此脚本正确运行前提:

该系统没有逻辑卷的情况下使用,因为逻辑卷df -h、df -i 时,使用率百分比是在第4列,而不是第5列。如有逻辑卷,则会漏统计逻辑卷使用情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 脚本 监控分区
相关文章推荐