我正在尝试编写一个shell脚本来监视文件系统。脚本逻辑是,
对于df -H
命令中的每个文件系统,读取文件系统阈值文件并获取临界阈值警告阈值。根据条件,它将发送通知。
这是我的剧本:
#!/bin/sh
df -H | grep -vE '^Filesystem|none|boot|tmp|tmpfs' | awk '{ print $5 " " $6 }' | while read $output
do
echo $output
fsuse=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
fsname=$(echo $output | awk '{ print $2 }' )
server=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $2}'`
fscrit=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $3}'`
fswarn=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $4}'`
serenv=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $5}'`
if [ $fsuse -ge $fscrit ]; then
message="CRITICAL:${server}:${serenv}:$fsname Is $fsuse Filled"
_notify;
elif [ $fsuse -gt $fswarn ] && [ $fsuse -lt $fscrit ]; then
message="WARNING: $fsname is $fsuse Filled"
_notify;
else
echo "File system space looks good"
fi
done
以下是/workspace/OSE/scripts/fs_alert
:
/:hlpdbq001:90:80:QA:dba_mail
/dev/shm:hlpdbq001:90:80:QA:dba_mail
/boot:hlpdbq001:90:80:QA:dba_mail
/home:hlpdbq001:90:80:QA:dba_mail
/opt:hlpdbq001:90:80:QA:dba_mail
/opt/security:hlpdbq001:90:80:QA:dba_mail
/tmp:hlpdbq001:90:80:QA:dba_mail
/var:hlpdbq001:90:80:QA:dba_mail
/u01/app:hlpdbq001:90:80:QA:dba_mail
/u01/app/oracle:hlpdbq001:90:80:QA:dba_mail
/oratrace:hlpdbq001:90:80:QA:dba_mail
/u01/app/emagent:hlpdbq001:90:80:QA:dba_mail
/gg:hlpdbq001:90:80:QA:dba_mail
/workspace:hlpdbq001:90:80:QA:dba_mail
/dbaudit:hlpdbq001:90:80:QA:dba_mail
/tools:hlpdbq001:90:80:QA:dba_mail
我的问题是当脚本试图从crit_va
文件系统的文件中获取warn_val
,/u01
时,我得到了三个结果。如何一次获取/过滤一个文件系统?
$ df -H|grep /u01
/dev/mapper/datavg-gridbaselv 53G 12G 39G 24% /u01/app
/dev/mapper/datavg-rdbmsbaselv 53G 9.6G 41G 20% /u01/app/oracle
/dev/mapper/datavg-oemagentlv 22G 980M 20G 5% /u01/app/emagent
处理此问题的最佳方法是什么?
我是否需要基于Filesystem
或Mounted on
的逻辑。
答案 0 :(得分:0)
不要重新发明轮子。有一些工具可以为你做到这一点。以monit为例:
http://sysadminman.net/blog/2011/monit-disk-space-monitoring-1716
答案 1 :(得分:0)
好吧,monit很好),如果你需要替代方案,请查看df-check - df实用程序的包装器,以便在每个分区的基础上验证未超过阈值。至少它看起来非常接近你在bash脚本中开始实现的内容,但它是用perl编写的,并且具有简洁的安装布局。准备使用工具。
- 问候
PS披露者 - 我是工具作者