项目中最常见的监视任务是监视整个文件系统,在不同的UNIX系统上,监视方法都是相同的,但是命令以及输出结果的字段略有不同,形成这种差别是由于不同的UNIX有着不同的命令语法及输出字段。
客户要求我们需要对以下平台的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 Mountedon
我们关心的是第一个: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
分享到:
相关推荐
主要介绍了shell脚本实现服务器进程监控的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
Linux常用的系统监控shell脚本
主要介绍了本地文件与服务器文件同步shell脚本的方法,然后在文章给大家补充介绍了shell脚本备份本地服务器的文件到远程服务器的实例代码,需要的朋友可以参考下
创建Shell脚本文件,编写如下过程:首先创建MAC地址的存储文件,然后使用arping命令,根据IP地址探测局域网中的主机获取对应的信息记录,应用grep命令、sed命令、awk命令对信息记录进行筛选,最后将筛选后的信息通过...
Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少。下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考。 1、监控磁盘的空闲空间shell脚本 robin@SZDB:~/dba_scripts/...
shell脚本生成.txt数据文件,shell脚本生成.txt数据文件
通过A服务器自动登录其他服务器自动传输文件、删除文件、自动检测tomcat启动状态,控制启动和停止、可配置多条服务器进行同步处理,适合集群管理
shell脚本,通过snmp方式获取远程服务器的CPU内存和硬盘的使用率,需要支持snmpget和snmpwalk命令,并且为了支持小数运算,需要安装bc命令。
比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件。有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身的子shell。 在bash中,子shell进程的PID存储在一个特殊的变量‘$$’中。这个变量...
使用Shell脚本对Linux系统和进程资源进行监控.docx使用Shell脚本对Linux系统和进程资源进行监控.docx
Shell脚本定时监控tomcat,服务挂掉自动重启
使用 Bash shell 脚本进行功能测试
需要提高cpu利用率的shell脚本
主要介绍了shell脚本实现linux系统文件完整性检测,本文给出的脚本使用对比MD5的方法,检测linux系统文件是否被替换等问题,需要的朋友可以参考下
linux shell脚本获取时间判断时间差,进行计算,自动化
shell编写的采集系统主机信息的脚本,包括CPU,内存,磁盘,网络信息。可以自己设置采集频率,并将采集信息生成SQL脚本通过FTP自动上传至数据库服务器,入库。
该程序使用场景说明:主要用域Linux服务器监控程序日志,如出现关键字异常则触发相应的动作或告警操作,通知到邮件联系人
实战Linux Shell编程与服务器管理的脚本文件和数据文件
本文介绍如何将本地服务器上的gitlba备份文件,备份到远程服务器上面,同时对远程服务器上面的gitlab备份文件进行定时清理。
利用shell脚本实现每隔60秒磁盘内存数据监控 #!/bin/bash #Author:GaoHongYu #QQ:1061767621 #Time:2019-12-24 18:43:22 #Name:ncjk.sh #Version:V1.0 clear xtip=$(hostname -I) cprl=$(df -Th |head -2|tail -1|...