码迷,mamicode.com
首页 > 其他好文 > 详细

脚本应用之十四: ping监控多台主机丢包

时间:2016-04-17 17:59:20      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:主机   监控   failed   action   后台运行   

测试系统版本: CentOS 6.4

作用: ping后台监控多台主机,根据丢包个数采取相应动作

使用: 将欲监控的主机作为参数,可前台运行或放到后台,CTRL+C结束, 后台运行的话 需要

    kill -2 $(cat .mypid)结束  ( .mypid 记录的是脚本主进程的PID )


演示:

技术分享

后台运行

技术分享


使用 pstree -ap 查看相关进程

技术分享

监控执行后的日志

技术分享

代码专区:

#!/bin/bash

MAIL=‘admin@mail.com‘
#定义丢包个数
failed_packages_sum=2
ping_timeout=5

MYPID=$$

timestamp()
{
	echo -n "$(date +"%Y-%m-%d %H:%M:%S") "
}

#符合条件后的操作函数,可以定义其他操作
action()
{
	echo ---------------$(timestamp)--------------- >>${1}.log
	traceroute -n -m 11 -q 2 $1 >>${1}.log
        mail -s "Ping $1 Failed " $MAIL <${1}.log
}

exec_ping()
{
	local stop_exec=false 
	local failed_sum=0 

	trap ‘stop_exec=true‘ 20

	while ! $stop_exec
	do
		ping -c 1 -w $ping_timeout $1 &>/dev/null && failed_sum=0 || (( failed_sum+=1 ))
		[[ $failed_sum -eq $failed_packages_sum ]] && action $1
	done
}

STOP=false

#只有接受此信号,脚本才能正常结束所有后台运行函数
trap ‘STOP=true‘ 2

echo $MYPID >.mypid

#后台运行监控函数,并记录pid
while [[ $# -ne 0 ]]
do
	exec_ping $1 &
	pids_arry=( ${pids_arry[@]} $! )
	shift
done

while ! $STOP; do sleep 1; done

for(( index=0; index<${#pids_arry[@]}; index++ ))
do
	kill -20 ${pids_arry[index]}
done


附件下载源代码



本文出自 “逆行者” 博客,请务必保留此出处http://lingyi.blog.51cto.com/2837715/1764760

脚本应用之十四: ping监控多台主机丢包

标签:主机   监控   failed   action   后台运行   

原文地址:http://lingyi.blog.51cto.com/2837715/1764760

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!