我与众多同学一样,在没有学习shell编程之前是对shell编程是一头雾水的,然而它能做什么我也不知道,就是觉得能够使用一个与别人不一样的方式去管理系统。现在我慢慢的懂shell的重要性,为小型的机房里面做一个小小的shell监控足够,当然大型的机房不能使用shell来监控系统,因为大型机房监控的机器有很多,而它们的状态是以报表和图形界面的形式来汇报问题的。
接下来我写一篇关于怎么用shell来进行系统监控并在进行发送邮件。
创建一个文件:
vim monitor.sh
#/bin/bash----默认执行方式 #以下为变量: HOST=`hostname`---输出当前系统的机器名 SYS=`uname-a`---输出当前系统信息 DATE=`date"+%F%H:%M:%S"`---输出当前系统时间 WEB=/var/www/html/$HOST.html---创建当前系统的网站的网页(以该脚本命名) cpu=`cat/proc/cpuinfo|grepprocessor|wc-l`---输出当前系统的cpu信息(作为判断信息) ID=`vmstat|awk'NR==3{print$15}'`----输出当前系统cpu的IP号码 WA=`vmstat|awk'NR==3{print$16}'`---输出系统的I/O的等待百分比 LOAD=`w|awk'NR==1{print$8}'|awk-F","'{print$1}'`---输出系统的负载值 DISK=`df-h|awk'NR==3{print$4}'|awk-F"%"'{print$1}'`---输出硬盘的已经使用值 FREE=`free-m|awk'NR==2{print$4}'`----输出内存空闲值 CACHE=`free-m|awk'NR==2{print$7}'`----输出内存缓存值 TCP=`netstat-atunlp`----输出当前系统的网络链接状态 IF=`iftop-ieth0-P-Nn-L100-s1-t>>$WEB`---输出系统的eth0接口的状态 #以下是执行上面所做的变量的输出 #在这里对cpu的线程数,cpu的LOAD,系统磁盘的状态,内存剩余。这四个做一个邮件的告警 echo"designforleoheng" echo"######---主机名---##########" echohostname=`echo$HOST` echo"######---系统参数---########" echosystem=`echo$SYS` echo"######---cpu线程数---#######" echoprocessor=`echo$cpu` if[$cpu-eq4];then `echo"wa=$WAandid=$IDcpuprocessorisok"|mail-s"$HOSTcpu"xxxxxxxx@qq.com` else `echo"wa=$WAandid=$IDcpuprocessorhaveproblem"|mail-s"$HOSTcpu"xxxxxxxx@qq.com` fi echo"######---cpu的ID---#########" echocpu~id=`echo$ID` echo"######---cpu的WA---#########" echocpu~wa=`echo$WA` echo"######---cpu的LOAD---#######" echocpu-load=`echo$LOAD` if[$LOAD>0.05];then `echo"cpu-LOADisbeyondtherate"|mail-s"cpu-LOAD"xxxxxxxx@qq.com` else `echo"cpu-LOADisok"|mail-s"cpu-LOAD"xxxxxxxx@qq.com` fi echo"######---系统磁盘的状态---##" echodisk-status=`echo$DISK` if[$DISK>80];then `echo"SYSTEM-DISKisbeyondthe80%"|mail-s"SYSTEM-DISK"xxxxxxxx@qq.com` else `echo"SYSTEM-DISKisok"|mail-s"SYSTEM-DISK"xxxxxxxx@qq.com` fi echo"######---内存剩余---########" echomemory=`echo($FREE+$CACHE)KB` memory=$(($FREE+$CACHE)) echo$memory if[$memory<1000];then `echo"SYSTEM-memorylessthan1000M"|mail-s"SYSTEM-memory"xxxxxxxx@qq.com` else `echo"SYSTEM-memoryisok"|mail-s"SYSTEM-memory"xxxxxxxx@qq.com` fi echo"######---TCP相关连接状态----#" echotcp-status=`echo$TCP` echo"######---eth0的流量---######" echo$IF echo"END"
####----退出shell之后---##### #部分同学的邮件无法发出,可能由于一下两个原因 1.没有安装mailx软件包 yuminstall-ymailxsendmail 2.系统设置没有做以下操作,将inet_interfaces选项改为all,如下 vim/etc/postfix/main.cf inet_interfaces=all