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

wKioL1PfElyA5HJQAADQ2ss5kSI888.jpg

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

目录
相关文章
|
7月前
|
监控 安全 Shell
Shell脚本实现企业电脑屏幕监控的自动化部署与维护
企业信息安全一直是重要的议题,而屏幕监控是一种有效的手段之一。本文将介绍如何使用Shell脚本实现企业电脑屏幕监控的自动化部署与维护,并在结尾部分说明如何将监控到的数据自动提交到指定网站。
253 1
|
7月前
|
监控 网络协议 Shell
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
164 0
|
7月前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
675 3
|
28天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
52 2
6种方法打造出色的Shell脚本
|
7月前
|
缓存 运维 监控
shell监控系统状态和资源使用命令
shell监控系统状态和资源使用命令
174 2
|
7月前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
69 5
|
7月前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
56 3
|
6月前
|
Ubuntu Shell Linux
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
181 0
|
7月前
|
Shell Linux
在linux shell脚本中root切换到普通用户执行脚本或命令的方法
在linux shell脚本中root切换到普通用户执行脚本或命令的方法
143 1
|
7月前
|
Shell
【shell】shell命令行放在变量中执行以及变量的常用方法
【shell】shell命令行放在变量中执行以及变量的常用方法