测试系统版本: CentOS 6.4
作用: ping后台监控多台主机,根据丢包个数采取相应动作
使用: 将欲监控的主机作为参数,可前台运行或放到后台,CTRL+C结束, 后台运行的话 需要
kill -2 $(cat .mypid)结束 ( .mypid 记录的是脚本主进程的PID )
演示:
后台运行
使用 pstree -ap 查看相关进程
监控执行后的日志
代码专区:
#!/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
附件下载源代码
时间: 2024-10-10 07:15:31