检测所有磁盘分区使用率和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的一并发送邮件
[ ! -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列。如有逻辑卷,则会漏统计逻辑卷使用情况。
思路: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列。如有逻辑卷,则会漏统计逻辑卷使用情况。
相关文章推荐
- Perl自定义开发Nagios检测磁盘所有分区使用率插件(NRPE端使用)
- 检测MYSQL不同步发邮件通知的脚本
- 检测MYSQL不同步发邮件通知的脚本
- 计算一个1-100之间所有不能被3整除的和正好大于或者等于2000,看看对不?
- iOS应用崩溃日志分析低内存闪退 因为低内存崩溃日志与普通崩溃日志略有不同,所以本教程特别分开说明一下。 iOS设备检测到低内存时,虚拟内存系统发出通知请求应用释放内存。这些通知发送到所有正在运行
- 自动检测所有盘然后删除所有分区的默认共享的批处理
- 在AppWeb后台,管理员所有数据已经录入完毕,但用手机浏览器登录评委打分界面,发现打分界面为空,或者选手人数不对等问题,如何解决?
- [Linux]结合awk列举大于指定容量大小所有文件目录
- 检测到有人登录到linux,mysql,ftp,就发邮件通知管理员
- 给定一个链表和一个值x,对它进行分区,使得小于x的所有节点都在大于或等于x的节点之前.保留两个分区中的每一个节点的原始相对顺序。
- resize2fs 修改ext2 ext3文件系统的大小 (普通分区也可,或者解决inode不够的问题)
- 分区容量大于16TB的格式化
- (扩展根目录容量方法汇总)把Linux系统迁移到另一个分区或者硬盘
- 20170714L08-00老男孩Linux运维实战培训-DELL R710新服务器多硬盘Raid5后容量大于2TB如何分区讲解
- #题目:有10 台被监控主机、一台监控机,在监控机上编写脚本,一旦某台被监控机器/ 分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次
- hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。
- 查看所有用户分区表及分区策略
- 匹配所有不包含子元素或者文本的空元素
- 给定一个数N,要求列出所有不大于N的素数
- 如何判断ArrayCollection里面所有的值是否相等或者是否含有某些值