扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
客户要求我们需要对以下平台的UNIX进行监控:Sgi Irix,IBM AIX,Redhat Linux,SUN Solaris,HP HP-UX。
UNIX操作系统本身就是一个超级编译器,所以对于程序员来说,使用并了解现有的命令及功能尤其重要了。
首先,我们来看一下获得所需的命令语法:
AIX中以KB字节或1024字节块查看文件系统的命令是df -k.命令执行结果有一下几列:
Filesystem 1024-blocks free %used Iused %Iused Mounted on
我们关心的是第一个:filesystem设备,第四个,以及第七个,至少有2个原因让我们需要了解文件系统设备和装配点。第一个原因是了解文件系统是不是一个NFS装配文件系统,如果NFS那么显示的是NFS服务器名称。第二个原因是不希望监视一个已经装配的CDROM,CD-ROM总是显示100%使用,作为只读设备来安装。
我们首先去掉这些标题。使用参数 df -k | tail +2
这样去掉了标题,但是还是有很多信息不是我们需要的,/cdrom 不需要显示,/proc装配点没有值表示,只是一个“-”符号。驱除这个内容,我们使用egrep语句:df -k | tail +2 |egrep -v '/dev/cd[0-9]/proc'
我们使用egrep和-v开关,-v表示显示除了模式匹配的内容外的所有内容。egrep用于扩展正则表达式
这样我们发现还是有一些信息是我们不需要的列,,现在我们感兴趣的列在1、4、7列中,我们可以使用awk语句来提取这些数据,列的位置我们可以使用位置参数$1\$2\$3来选择,我们使用awk来进行扩展:
df -k | tail +2 | egrep -v '/dev/cd[0-9]/proc' | awk ' { print $1,$4,$7 } '
为了便于命令输出,我们可以把结果写到一个文件并对文件进行处理。在脚本中,我们定义了一个文件,并使用一个变量来指向文件
WORKFILE="/tmp/df.work"
>$WORKFILE #初始化长度为0。
监视文件系统,我们需要确定一个触发阀值,超过这个阀值认为文件系统已经满了,在我们的客户要求中,超过85%我们就认为容量已经满了,我们可以将变量值赋给FSMAX,我们定义FSMAX="85"。还有一个问题:$WORKFILE仍然包括一个一个百分号,我们需要一个整数值来和$FSMAX进行比较,我们可以使用sed命令来进行转换,sed用于字符的替换,在这里用于字符的删除,,还有一个问题:超过了85%的门限,最加一条消息到$OUTFILE。以表示超过了的消息
#!/usr/bin/ksh
#
# SCRIPT: fs_mon_AIX.ksh
# AUTHOR: xu jianming
# DATE: 02-7-2007
# REV: 1.0
# PURPOSE: This script is used to monitor for full filesystems,
# which is defined as "exceeding" the FSMAX value.
# A message is displayed for all "full" filesystems.
#
# PLATFORM: AIX
#
# REV LIST:
#
# set -n # Uncomment to check syntax without any execution
# set -x # Uncomment to debug this script
#
##### DEFINE FILES AND VARIABLES HERE ####
WORKFILE="/tmp/df.work" # Holds filesystem data
>$WORKFILE # Initialize to empty
OUTFILE="/tmp/df.outfile" # Output display file
>$OUTFILE # Initialize to empty
THISHOST=`hostname` # Hostname of this machine
FSMAX="85" # Max. FS percentage value
######## START OF MAIN #############
# Get the data of interest by stripping out /dev/cd#,
# /proc rows and keeping columns 1, 4 and 7
df -k | tail +2 | egrep -v '/dev/cd[0-9]|/proc' \
| awk '{print $1, $4, $7}' > $WORKFILE
# Loop through each line of the file and compare column 2
while read FSDEVICE FSVALUE FSMOUNT
do
FSVALUE=$(echo $FSVALUE | sed s/\%//g) # Remove the % sign
if [ $FSVALUE -gt $FSMAX ]
then
echo "$FSDEVICE mounted on $FSMOUNT is ${FSVALUE}%" \
>> $OUTFILE
fi
done < $WORKFILE
if [[ -s $OUTFILE ]]
then
echo "\nFull Filesystem(s) on $THISHOST\n"
cat $OUTFILE
print
fi
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者