题目要求
设计一个脚本,监控远程的一台机器(假设ip为180.163.26.39)的存活状态,当发现宕机时发一封邮件给你自己。
核心要点
ping -c10 180.163.26.39 通过ping来判定对方是否在线
参考答案
#!/bin/bash
n=`ping -c5 180.163.26.39|grep 'packet' |awk -F '%' '{print $1}' |awk '{print $NF}'`
if [ -z "$n" ]
then
echo "脚本有问题。"
python mail.py $m "检测机器存活脚本$0有问题" "获取变量的值为空"
exit
else
n1=`echo $n|sed 's/[0-9]//g'`
if [ -n "$n" ]
then
echo "脚本有问题。"
python mail.py $m "检测机器存活脚本$0有问题" "获取变量的值不是纯数字"
exit
fi
fi
if
m=123@qq.com
while :
do
if [ $n -ge 50 ]
then
python mail.py $m "机器宕机" "丢包率是$n%"
fi
sleep 30
done
ping:测试主机之间网络的联通性
ping [选项] 目标主机
Linux默认是一直发送数据包,Ctrl+C停止
选项
-c<次数> 指定发送ICMP报文的次数,否则ping命令将一直发送报文
ping -c5 180.168.26.39结果
[root@VM-8-9-centos ~]# ping -c5 180.163.26.39
PING 180.163.26.39 (180.163.26.39) 56(84) bytes of data.
64 bytes from 180.163.26.39: icmp_seq=1 ttl=51 time=32.4 ms
64 bytes from 180.163.26.39: icmp_seq=2 ttl=51 time=32.3 ms
64 bytes from 180.163.26.39: icmp_seq=3 ttl=51 time=32.3 ms
64 bytes from 180.163.26.39: icmp_seq=4 ttl=51 time=32.2 ms
64 bytes from 180.163.26.39: icmp_seq=5 ttl=51 time=32.2 ms
--- 180.163.26.39 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 32.277/32.319/32.433/0.127 ms
n=`ping -c5 180.163.26.39|grep ‘packet’ |awk -F ‘%’ ‘{print $1}’ |awk ‘{print $NF}’
过滤丢包率,匹配包含packet这一行,用%做分隔符,获取第一个参数,接着获取最后一个参数,变量n的值为0
-z,检测字符串长度是否为0,为0返回 true
s/[0-9]//g: 删除字符串包含的所有的数字
-z “$n”:检测字符串长度是否为0,为0返回 true。
-n “$n”:检测字符串长度是否不为0,不为0返回 true。
$n -ge 50:表示n大于等于50