测试系统版本: 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
原文地址:http://lingyi.blog.51cto.com/2837715/1764760