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

测试系统版本: CentOS 6.4

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

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

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


演示:

脚本应用之十四: ping监控多台主机丢包_第1张图片

后台运行

脚本应用之十四: ping监控多台主机丢包_第2张图片


使用 pstree -ap 查看相关进程

脚本应用之十四: ping监控多台主机丢包_第3张图片

监控执行后的日志

脚本应用之十四: ping监控多台主机丢包_第4张图片

代码专区:

#!/bin/bash

MAIL='[email protected]'
#定义丢包个数
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


附件下载源代码



你可能感兴趣的:(监控,failed,主机)