shell监控mysql发邮件_用shell脚本监控linux系统 自动发送邮件

此脚本可以做一个定时的检测,超出设定的值,即往邮箱发送警告

脚本用到bc,sendmail,163邮箱,yum install bc#!/bin/bash

#System Monitoring Script

while [ 1 ]

do

#本机需开启postfix或sendmail服务。

#报警邮件地址设置

MAILFROM=root@localhost

MAILTO=your_mail@163.com

#设置脚本运行间隔时间。单位(秒)。

RUNTIME=900

#内存使用率监控设置,单位 (%)

MEMTHRE=80

#流量监控设置

#要监控的网卡

ETHX=eth0

#填写大于多少MB的时候发送警报,单位(MB)

INFLOWTHREMB=50

OUTFLOWTHREMB=50

#填写大于多少KB的时候发送警报,单位(KB)

INFLOWTHREKB=8000

OUTFLOWTHREKB=8000

#TCP连接状态数量监控设置

#填写最大连接的个数

TIME_WAIT=4000

FIN_WAIT1=500

FIN_WAIT2=200

ESTABLISHED=4000

SYN_RECV=100

CLOSE_WAIT=100

CLOSING=1000

LAST_ACK=3000

#CPU使用率监控设置

#填写cpu使用率大于多少发送报警,单位(%)

CPUTHRE=60

#硬盘使用大小设置

#填写硬盘占用率,单位(%)

ROOT=80

VAR=100

USR=100

BOOT=80

#调试模式开关。(YES/NO)

DBUG=NO

# 监 控 脚 本 执 行 内 容

################################################################################

time=`date +"%Y-%m-%d %H:%M:%S"`

#内存监控部分

NULL=/dev/null

MEM=`free -m |grep Mem |awk '{print $3/$2*100}'`

MEMB=`free -m |grep Mem |awk '{print $2,$4+$6+$7}'|awk '{print $1,$1-$2}'| awk '{print $2/$1*100}'`

memuse=`free -m|grep "buffers/cache"|awk '{print $3}'`

memtotal=`free -m|grep "Mem"|awk '{print $2}'`

memory=`echo "$memuse/$memtotal*100"|bc -l|cut -d. -f1`

MA=`expr $memory \> $MEMTHRE `

if [ $MA -eq 1 ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time MEM内存警告,当前内存占用率为$MEM %,大于$MEMTHRE %.

EOF

fi

MB=`expr $MEMB \> $MEMTHRE`

if [ $MB -eq 1 ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time MEMB内存警告,当前内存占用率为$MEMB %,大于$MEMTHRE %

EOF

fi

#流量监控部分

FLOWA=/tmp/.flow

ifconfig $ETHX |grep "RX byte" |awk '{print $2" "$6}' |awk -Fbytes: '{print "INPUT "$2"OUTPUT "$3}'\ > $FLOWA

INPUTA=`cat $FLOWA |awk '{print $2}'`

OUTPUTA=`cat $FLOWA |awk '{print $4}'`

sleep 1

ifconfig $ETHX |grep "RX byte" |awk '{print $2" "$6}' |awk -Fbytes: '{print "INPUT "$2"OUTPUT "$3}'\ > $FLOWA

INPUTB=`cat $FLOWA |awk '{print $2}'`

OUTPUTB=`cat $FLOWA |awk '{print $4}'`

INPUTC=`echo "$INPUTB-$INPUTA" | bc`

OUTPUTC=`echo "$OUTPUTB-$OUTPUTA"| bc`

INPUTMBA=`echo "$INPUTC/1024"|bc`

OUTPUTMBA=`echo "$OUTPUTC/1024"|bc`

INMBF=/tmp/.inputMB

OUTMBF=/tmp/.outputMB

echo `echo "scale=4;$INPUTMBA/1024"|bc`MB > $INMBF

echo `echo "scale=4;$OUTPUTMBA/1024"|bc`MB > $OUTMBF

INMB=`cat $INMBF |awk '{print $1}'`

OUTMB=`cat $OUTMBF |awk '{print $1}'`

if [ $INPUTMBA -gt 1024 ] ; then

if [ $INMB -gt $INFLOWTHREMB ] ;then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 流量警告,当前流量异常,请登录服务器查看。当前速率$INMB MB/秒,大于$INFLOWTHREMB MB/秒。

EOF

fi

if [ $OUTMB -gt $OUTFLOWTHREMB ] ;then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 流量警告,当前流量异常,请登录服务器查看。当前速率$OUTMB MB/秒 大于$OUTFLOWTHREMB MB/秒。

EOF

fi

else

INKBF=/tmp/.inputKB

OUTKBF=/tmp/.outputKB

echo $INPUTMBA KB > $INKBF

echo $OUTPUTMBA KB > $OUTKBF

INKB=`cat $INKBF |awk '{print $1}'`

OUTKB=`cat $OUTKBF |awk '{print $1}'`

if [ $INKB -gt $INFLOWTHREKB ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 流量警告,当前流量异常,请登录服务器查看。$INKB KB/秒 大于$INFLOWTHREKB KB/秒。

EOF

fi

if [ $OUTKB -gt $OUTFLOWTHREKB ] ;then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 流量警告,当前流量异常,请登录服务器查看。当前速率$OUTKB KB/秒大于$INFLOWTHREKB KB/秒。

EOF

fi

fi

#连接数

tcpfile=/tmp/.tcp

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' >$tcpfile

grep TIME_WAIT $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "TIME_WAIT 0 " >> $tcpfile

fi

grep FIN_WAIT1 $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "FIN_WAIT1 0 " >> $tcpfile

fi

grep FIN_WAIT2 $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "FIN_WAIT2 0 " >> $tcpfile

fi

grep CLOSE_WAIT $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "CLOSE_WAIT 0 " >> $tcpfile

fi

grep LAST_ACK $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "LAST_ACK 0 " >> $tcpfile

fi

grep SYN_RECV $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "SYN_RECV 0 " >> $tcpfile

fi

grep CLOSING $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "CLOSING 0 " >> $tcpfile

fi

grep ESTABLISHED $tcpfile > $NULL

if [ $? -eq 1 ] ; then

echo "ESTABLISHED 0 " >> $tcpfile

fi

TIME_WAITV=`grep TIME_WAIT $tcpfile | awk '{print $2}'`

FIN_WAIT1V=`grep FIN_WAIT1 $tcpfile | awk '{print $2}'`

FIN_WAIT2V=`grep FIN_WAIT2 $tcpfile | awk '{print $2}'`

ESTABLISHEDV=`grep ESTABLISHED $tcpfile | awk '{print $2}'`

SYN_RECVV=`grep SYN_RECV $tcpfile | awk '{print $2}'`

CLOSINGV=`grep CLOSING $tcpfile | awk '{print $2}'`

CLOSE_WAITV=`grep CLOSE_WAIT $tcpfile | awk '{print $2}'`

LAST_ACKV=`grep LAST_ACK $tcpfile | awk '{print $2}'`

if [ $ESTABLISHEDV -gt $ESTABLISHED ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前ESTABLISHED连接数异常,请登录服务器查看。当前连接数为$ESTABLISHEDV个,大于$ESTABLISHED个

EOF

fi

if [ $SYN_RECVV -gt $SYN_RECV ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前SYN_RECV连接数异常,请登录服务器查看。当前连接数为$SYN_RECVV个,大于$SYN_REC个。

EOF

fi

if [ $CLOSE_WAITV -gt $CLOSE_WAIT ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前CLOSE_WAIT连接数异常,请登录服务器查看。当前连接数为$CLOSE_WAITV个,大于$CLOSE_WAIT个。

EOF

fi

if [ $CLOSINGV -gt $CLOSING ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前CLOSING连接数异常,请登录服务器查看。当前连接数为$CLOSINGV个,大于$CLOSING个。

EOF

fi

if [ $LAST_ACKV -gt $LAST_ACK ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前LAST_ACK连接数异常,请登录服务器查看。当前连接数为$LAST_ACKV个,大于$LAST_ACK个。

EOF

fi

if [ $TIME_WAITV -gt $TIME_WAIT ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前TIME_WAIT连接数异常,请登录服务器查看。当前连接数为$TIME_WAITV个,大于$TIME_WAIT个。

EOF

fi

if [ $FIN_WAIT1V -gt $FIN_WAIT1 ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前FIN_WAIT1连接数异常,请登录服务器查看。当前连接数为$FIN_WAIT1V个,大于$FIN_WAIT1个。

EOF

fi

if [ $FIN_WAIT2V -gt $FIN_WAIT2 ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 连接数警告,当前FIN_WAIT2连接数异常,请登录服务器查看。当前连接数为$FIN_WAIT2V个,大于$FIN_WAIT2个。

EOF

fi

DISKF=/tmp/.disk

df -h > $DISKF

grep var $DISKF > $NULL

if [ $? -eq 1 ] ; then

echo "/dev/sda1 20G 1.6G 17G 0% /var" >> $DISKF

fi

grep usr $DISKF > $NULL

if [ $? -eq 1 ] ; then

echo "/dev/sda1 20G 1.6G 17G 0% /usr" >> $DISKF

fi

grep boot $DISKF > $NULL

if [ $? -eq 1 ] ; then

echo "/dev/sda1 20G 1.6G 17G 0% /boot" >> $DISKF

fi

BOOTV=`cat $DISKF | grep boot | awk '{print $5}'|awk -F% '{print $1}'`

VARV=`cat $DISKF | grep var | awk '{print $5}'|awk -F% '{print $1}'`

USRV=`cat $DISKF | grep usr | awk '{print $5}'|awk -F% '{print $1}'`

grep VolGroup $DISKF > $NULL

if [ $? -eq 0 ] ;then

ROOTV=`cat $DISKF | sed -n '3p' |awk '{print $4}'|awk -F% '{print $1}'`

else

ROOTV=`cat $DISKF | sed -n '2p'|awk '{print $5}'|awk -F% '{print $1}'`

fi

if [ $ROOTV -gt $ROOT ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 磁盘使用警告,您监控的 / 分区已经大于你设置的数值$ROOT %,详情登陆系统查看,目前使用率为$ROOTV %.

EOF

fi

if [ $VARV -gt $VAR ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 磁盘使用警告,您监控的 /var 分区已经大于你设置的数值$VAR %,详情登陆系统查看,目前使用率为$VARV %.

EOF

fi

if [ $BOOTV -gt $BOOT ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 磁盘使用警告,您监控的 /boot 分区已经大于你设置的数值 $BOOT %,详情登陆系统查看,目前使用率为$BOOTV %.

EOF

fi

if [ $USRV -gt $USR ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 磁盘使用警告,您监控的 /usr 分区已经大于你设置的数值$USR %,详情登陆系统查看,目前使用率为$USRV %.

EOF

fi

CPURATE=`top -b -n 1 |grep Cpu | awk '{print $2}' |awk -F. '{print $1}'`

CB=`expr $CPURATE \> $CPUTHRE`

if [ $CB -eq 1 ] ; then

sendmail -t <

from: $MAILFROM

to:$MAILTO

subject:67warning

$time 使用警告,您监控的CPU使用率,已经超过您设置的限额$CPUTHRE %,当前CPU使用率为$CPURATE .

EOF

fi

DBUGS=YES

if [ "$DBUGS" == "$DBUG" ] ; then

echo " "'== 内 存 ==' ;echo \ ;

echo " "当前程序占用内存为 $MEMB % ,总占用内存为 $MEM % ; echo \ ;

echo " "'== 流 量 =='; echo \ ;

YA=`wc -l $INMBF > /dev/null 2>&1 ; echo $?`

if [ $YA -eq 1 ] ; then

echo 0 > $INMBF

fi

IN=`expr $INMB \> $INFLOWTHREMB >$NULL; echo $? ` 2> $NULL

if [ $IN -eq 1 ] ; then

echo " "当前输入流量为 $INMB MB/秒 .;

echo " "当前输入流量为 $INKB KB/秒 .;

fi

YB=`wc -l $OUTMBF > /dev/null 2>&1 ; echo $?`

if [ $YB -eq 1 ] ; then

echo 0 > $OUTMBF

fi

OUT=`expr $OUTMB \> $OUTFLOWTHREMB >$NULL ; echo $?` 2> $NULL

if [ $OUT -eq 1 ] ; then

echo " "当前输出流量为 $OUTMB MB/秒。 ;

echo " "当前输出流量为 $OUTKB KB/秒。 ; echo \ ;

fi

echo " "'== 连接数 ==' ; echo \ ;

echo " "当前TIME_WAIT" " 连接数为 $TIME_WAITV 个。

echo " "当前FIN_WAIT1" " 连接数为 $FIN_WAIT1V 个。

echo " "当前FIN_WAIT2" " 连接数为 $FIN_WAIT2V 个。

echo " "当前CLOSE_WAIT" " 连接数为 $CLOSE_WAITV 个。

echo " "当前ESTABLISHED"" 连接数为 $ESTABLISHEDV 个。

echo " "当前SYN_RECV" " 连接数为 $SYN_RECVV 个。

echo " "当前LAST_ACKV" " 连接数为 $LAST_ACKV 个。

echo " "当前CLOSING" " 连接数为 $CLOSINGV 个。; echo \ ;

echo " "'== CPU使用率 ==' ; echo \ ;

echo " "当前CPU 进程使用率为 $USERATE . ;echo \ ;

echo " "'== 磁盘使用率 ==' ; echo \ ;

echo " "当前" "/" "分区," "使用率为 $ROOTV %.

echo " "当前/var 分区, 使用率为 $VARV %.

echo " "当前/boot分区, 使用率为 $BOOTV %.

echo " "当前/usr 分区, 使用率为 $USRV %.

exit

fi

sleep $RUNTIME

done

脚本42行,先改为DBUG=YES,运行一次,如果没问题,出现下面提示

eb4e74f9a07a54136d44bd9db2646a01.png

再把DBUG=NO改回来

附,邮件通知

26fd5869159c0a2effe361d1703f3713.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】01-C语言概述

说明&#xff1a;这个C语言专题&#xff0c;是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员&#xff0c;能够快速上手C语言。如果你还没有编程经验&#xff0c;或者对C语言、iOS开发不感兴趣&#xff0c;请忽略 回到顶部为什么iOS开发要先学C语言&#xff1f; i…

Java IO 体系结构

参考文章地址: http://blog.csdn.net/oracle_microsoft/article/details/2634231 Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是一套字节输入-输出,字符输入-输出体系 2.…

java wap_JAVA和WAP移动学习技术

JAVA和WAP移动学习技术JAVA/WAP移动学习技术摘 要 移动学习是今后课堂学习的必要补充&#xff0c;WAP技术是基于连接浏览的移动学习关键技术。本文以移动电话学生成绩查询系统为例&#xff0c;利用UML模型表征实现的过程&#xff0c;分析其运用的WML 、SERVLET与连接池等技术。…

NuGet学习笔记(1)——初识NuGet及快速安装使用

关于NuGet园子里已经有不少介绍及使用经验&#xff0c;本文仅作为自己研究学习NuGet一个记录。 初次认识NuGet是在去年把项目升级为MVC3的时候&#xff0c;当时看到工具菜单多一项Library Package Manager&#xff0c;右键项目文件多了一项Manage Nuget Packages...&#xff0c…

ZOJ 2562 More Divisors

又是个水题&#xff0c;刚刚开始没有用搜索&#xff0c;因为对于反素数有&#xff1a; n2^t1*3^t2^5^t3*7^t4..... 这里有 t1>t2>t3>t4。 而且相同的因数的情况下&#xff0c;素数越不同越好。 哪知道这个方法错了&#xff01; 。 看来还得中规中矩得用dfs。 我觉得还…

java for 和foreach_关于java中for和foreach循环

for循环中的循环条件中的变量只求一次值&#xff01;具体看最后的图片foreach语句是java5新增&#xff0c;在遍历数组、集合的时候&#xff0c;foreach拥有不错的性能。foreach是for语句的简化&#xff0c;但是foreach并不能替代for循环。可以这么说&#xff0c;任何foreach都能…

将datatable导出为excel的三种方式(转)

一、使用Microsoft.Office.Interop.Excel.DLL 需要安装Office 代码如下&#xff1a; 2 publicstaticboolExportExcel(System.Data.DataTable dt, stringpath)3 {4 boolsucceed false;5 if(dt !null)6 {7 Microsoft.Office.Interop.Excel.Application xlApp null;8 try9 {10 xl…

bae java上传图片_干货分享:gradle+svn轻松搞定BAE java代码上传

背景在BAE基础版和专业版上&#xff0c;java应用通过war包文件部署的时候&#xff0c;总会遇到一些小麻烦&#xff1a;BAE专业版的svn/git有单文件40M的限制&#xff0c;所以在专业版的svn/git中上传超过40M的war包(很多war包都会超过40M)是不可行的BAE基础版的svn/git&#xf…

java缺省包详解_Java在其它包中无法引用缺省包中的类

1、现象1.1 问题场景最近&#xff0c;在写测试代码时&#xff0c;将一个类(这里暂且称为ClassA)放在在缺省包中&#xff0c;也就是说&#xff0c;直接放在了src目录下&#xff0c;没有创建包。然后&#xff0c;将这个类打入了jar文件&#xff0c;提供给另外的工程(这里称为Proj…

myeclipse开发代码颜色搭配保护视力

废话不多说&#xff0c;这个东西主要是为了保护视力的&#xff0c;另外我也挺喜欢上边的颜色搭配的&#xff0c;今天特拿出来分享。直接上图 转载于:https://www.cnblogs.com/suncoolcat/p/3293895.html

linux下qt5静态编译器_笔记-linux下Qt5.3.2 静态编译

这里主要讲linux下的编译&#xff0c;windows下面比较简单依赖sudo apt-get install"^libxcb.*"libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev编译选项configure -confirm-license -opensource -static -release -no-qml-debug -qt-freetype -qt-xcb -n…

猜字小游戏java方法体_java实现猜字小游戏

闲来无事&#xff0c;实现一个猜数字的小游戏&#xff0c;目的是巩固自己的基础知识&#xff0c;培养敲代码的乐趣。首先在项目中所创建的类中导包(视频教程推荐&#xff1a;java课程)import java.util.Scanner;//一个简单的文本扫描器&#xff0c;可以使用正则表达式解析原始类…

Aixs2发布webservice服务

http://www.blogjava.net/pzxsheng/archive/2012/12/21/393319.html 开发前准备&#xff1a; 1、Eclipse Java EE IDE&#xff08;Juno Service Release 1&#xff09;&#xff0c;这个必须是for J2EE 的IDE&#xff0c;因为发布webservice的插件所需。 下载地址&…

快照java开源_maven快照版本和发布版本

在使用maven过程中&#xff0c;我们在开发阶段经常性的会有很多公共库处于不稳定状态&#xff0c;随时需要修改并发布&#xff0c;可能一天就要发布一次&#xff0c;遇到bug时&#xff0c;甚至一天要发布N次。我们知道&#xff0c;maven的依赖管理是基于版本管理的&#xff0c;…

java里的sleuth_java基础之spring cloud微服务快速教程之(十一) Sleuth(zipkin) 服务链路追踪...

0、前言微服务架构上众多微服务通过REST调用&#xff0c;可能需要很多个服务协同才能完成一个接口功能&#xff0c;如果链路上任何一个服务出现问题或者网络超时&#xff0c;都会形成导致接口调用失败。随着业务的不断扩张&#xff0c;服务之间互相调用会越来越复杂。如何清晰地…

opengl模板缓冲区

相信大家有些人对opengl的模板缓冲区不是很理解&#xff0c;包括我最开始也是&#xff0c;opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制&#xff0c;那些不能进行绘制。这里的过滤技术也就是我们的一个控制方法&#xff0c;主要体现在如下两个函数glStenci…

vue在java中的应用_开发知识-Vue篇:在Vue应用中集成O2OA

在前面的章节中&#xff0c;我们介绍了两种在O2OA中使用Vue开发应用的方式&#xff0c;已经可以满足绝大多数的情况了。如果您考虑完全脱离O2的web服务器&#xff0c;自己搭建web服务器&#xff0c;那就请阅读本章。我们还是使用Vue的Vue-CLI工具&#xff0c;创建Vue应用&#…

C++ 虚函数在基类与派生类对象间的表现及其分析

近来看了侯捷的《深入浅出MFC》&#xff0c;读到C重要性质中的虚函数与多态那部分内容时&#xff0c;顿时有了疑惑。因为书中说了这么一句&#xff1a;使用“基类之指针”指向“派生类之对象”&#xff0c;由该指针只能调用基类所定义的函数&#xff0c;如果要让基类的指针使用…