Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)

#前提已经可以通过mail或mutt客户端发邮件

1.先安装sendmail来发邮件


1

2

3

  # yum -y install sendmail

  # /etc/init.d/sendmail start

  # chkconfig sendmail on

2.再安装邮件客户端


1

   # yum -y install mutt

  2.1 为了更好在邮件中显示,设置mutt客户端发送信息


1

2

3

4

5

6

7

  # vim /etc/Muttrc

  set charset="utf-8"           #设置发邮件编码

  set envelope_from=yes

  set rfc2047_parameters=yes    #解决附件乱码问题

  set realname="报警"           #发件人别名

  set use_from=yes              #指定是否显示别名

  set from=monitor@test.com     #发送人地址

方法1、通过加失败计数器来判断(误报率低)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

DATE=`date +%F" "%H:%M`

IP=/root/monitor/ip.txt     #ip地址表

MAIL=zhenliang369@163.com

for ip in $(cat $IP | sed '/^#/d')

do

    for ((i=1;i<=3;i++))

    do

        ping -c 1 $ip &>/dev/null

    [ $? -ne 0 ] && let FailCount+=1;

    done

done

[ -z $FailCount ] && FailCount=0  #当ping都正常时,FailCount值为空,就设置FailCount值为0,用整数比较

if [ $FailCount -eq 2 ];then

    #echo "$IP ping is failed."

    echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed, Please check ! ! !" | mutt -s "Ping Monitor" $MAIL

fi

#添加任务计划

# crontab -e

*/1 * * * * /root/monitor/ping.sh


1

done

方法二、通过ping一个包的状态判断(误报率低,建议此方法)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/bin/bash

MAIL="baojingtongzhi@163.com huangxiaohong@loongtao.com"

for ip in $(cat ip_list|sed "/^#/d")    #ip_list是当前目录下IP表

  do

     ping -c 1 $ip &>/dev/null            #三个ping有一个能通,说明服务器正常

     a=$?

     sleep 2

     ping -c 1 $ip &>/dev/null

     b=$?

     sleep 2

     ping -c 1 $ip &>/dev/null

     c=$?

     sleep 2

     DATE=$(date +%F" "%H:%M)

     if [ $a -ne 0 -a $b -ne 0 -a $c -ne 0 ];then

         echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed." | mail -s "Ping $ip failed From 255.252" $MAIL

     #else

     #    echo "$ip ping is successful."

     fi

done

方法三、通过丢包率来判断是否正常(误报率高)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

#!/bin/bash

while true

do

    DATE=`date +%F" "%H:%M`

    MAIL="zhenliang369@163.com"

  for ip in $(cat ip_list|sed "/^#/d")       #ip_list是当前目录下IP表 

  do

     num=$(ping -c 2 $ip |grep "100% packet loss" |wc -l)    

     if [ $num == 1 ];then

        echo -e "Date : $DATE\nHost : $i\nProblem : Ping is failed." | mail -s "Ping $i failed From 255.252" $MAIL

     fi

  done

sleep 30

done


时间: 2024-10-31 07:51:01

Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)的相关文章

生产环境Shell脚本Ping监控主机是否存活(多种方法)

在网上针对shell脚本ping监控主机是否存活的文档很多,但大多都是ping一次就决定了状态,误报率会很高,为了精确判断,ping三次不通再发告警,只要一次ping通则正常.于是,今天中午抽出点时间总结了下面脚本. 脚本功能:通过Ping命令监控主机是否存活,如果ping失败则继续ping,三次不通就认为主机宕机或网络有问题,这时就可以发送邮件告警了. 方法1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/bin/bash

Shell脚本中执行sql语句操作mysql的5种方法_linux shell

对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到shell脚本文件中 复制代码 代码如下: --演示环境  [root@SZDB ~]# more /etc/issue  CentOS release 5.9 (Final)  Kernel \r on an \

shell查找当前目录下大于1M的文件的三种方法分享_linux shell

1.使用find的参数实现 复制代码 代码如下: [root@xiaobb mnt]# find . -maxdepth 1 -size +1000000c./sys.tar.gz./install.tar.bz2./CTeX_2.9.0.152_Full.exe./php-5.3.6.tar.gz[root@xiaobb mnt]# ls -lhtotal 1.3G-rw-r--r-- 1 root root 1.1G 2011-04-28 11:35 CTeX_2.9.0.152_Full.

使用Python脚本实现批量网站存活检测遇到问题及解决方法_python

做渗透测试的时候,有个比较大的项目,里面有几百个网站,这样你必须首先确定哪些网站是正常,哪些网站是不正常的.所以自己就编了一个小脚本,为以后方便使用. 具体实现的代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*- ''' @Author:joy_nick @博客:http://byd.dropsec.xyz/ ''' import requests import sys f = open('url.txt', 'r') url = f.readline

Android shell命令行中过滤adb logcat输出的几种方法_Android

我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法.        1.只显示需要的输出(白名单)        最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配.简单的匹配一行当中的某个字符串,例如 MyApp:        adb logcat | grep MyApp       

WinPE添加自定义脚本的三种方法

WinPE系统提供了三种方法启动自定义脚本:Winpeshl.ini.Startnet.cmd 和 Unattend.xml.WinPE的默认界面是"命令提示符"窗口.但可以创建自定义的Winpeshl.ini文件,以便运行自己的外壳应用程序.也可以创建自己的 Startnet.cmd批处理文件来运行特定的命令集.批处理文件或脚本.Unattend.xml是WinPE 2.0的新应答文件格式,它取代了Winbom.ini和Winpeoem.sif. 在添加任何自定义脚本之前,必须先使用

为WinPE添加脚本的三种方法

  为PE添加脚本有哪些方法呢?下面为你介绍三种方法. 一.使用Winpeshl.ini添加自定义脚本: 可以使用Winpeshl.ini的文件来启动自定义的外壳应用程序.Winpeshl.exe将在启动期间处理Winpeshl.ini中的设置.使用文本编辑器(如记事本)创建具有以下文件目录结构的Winpeshl.ini文本文件.例如: [LaunchApp] AppPath = %SYSTEMDRIVE%myshell.exe [LaunchApps] %SYSTEMDRIVE%mydirap

【转载】Python脚本判断一个数是否为素数的几种方法

     质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一.基于质数定义的基础之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等.算术基本定理证明每个大于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯一的.这个定理的重要一点是,将1排斥在素数集合以外.如果1被认为是素数,那么这些严格的阐述就不得不加上

Python监控主机是否存活,并发报警邮件

 利用python写了简单测试主机是否存活脚本,此脚本不适于线上使用,因为网络延迟.丢包现象会造成误报邮件,那么后续会更新判断三次ping不通后再发报警邮件,并启用多线程处理. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #!/usr/bin/env python # coding:UTF-8 import tim