|
作用:通过ping工作实时监控多台主机
实现:多进程后台运行,并分区域显示
使用:将欲监控的主机作为参数
演示:
代码专区:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| #/bin/bash
# LY
# ------------------
# Copyright 2016.04.14 LingYi (lydygly@163.com) QQ:1519952564
# "monitor hosts by batch ping in the background"
all_sum=0
success_sum=0
failed_sum=0
failed_percent=0
pids_arry=()
signs_arry=()
ips_arry=($@)
line_start=5
#显示间隔(行)
line_interval=1
#后台运行函数,实现ping操作以及在规定区域打印统计信息
exec_func()
{
local stop_exec=false
trap 'stop_exec=true' $3
while ! $stop_exec; do
ping -c 1 -W 2 $1 &>/dev/null && (( success_sum+=1 )) || (( failed_sum+=1 ))
(( all_sum+=1 ))
failed_percent=$( echo "scale=2;${failed_sum}/${all_sum}*100" | bc )
echo -ne "[$2;1H"
printf " %-16s%-10s%-10s%-10s%-10s" $1 $all_sum $success_sum $failed_sum "${failed_percent}%"
usleep 1$((RANDOM%5))00000
done
}
#捕捉信号(一般ctrl+c),并忽略
trap ' ' 2
#隐藏鼠标
tput civis
clear
printf " %s" 'Ping Monitor [ "Q" to Exit ! ]'
printf "%57s" ' ' | tr ' ' '='
printf " %-16s%-10s%-10s%-10s%-10s" IP Sum Suc Fail Perc
#循环监控主机,并记录后台进程的进程号,以便运行结束后禁止其运行
for(( index=0; index<${#ips_arry[@]}; index++ )); do
sign=$((RANDOM%20+10))
(( line_start+=line_interval ))
exec_func ${ips_arry[index]} $line_start $sign &
pids_arry=( ${pids_arry[@]} $! )
signs_arry=( ${signs_arry[@]} $sign )
usleep $((RANDOM%5+6))00000
done
#接收用户通过“q”键 终止脚本运行
while :; do
read -s -n 1 user_input
if [[ $user_input == 'q' ]]; then
for ((index=0; index<${#ips_arry[@]}; index++ ))
do
kill -${signs_arry[index]} ${pids_arry[index]} &>/dev/null
done
tput cnorm
sleep 1
echo -ne "[$line_start;1H"
echo
exit
fi
done
|
源码下载链接
ping_hosts.rar
(820 Bytes, 下载次数: 1)
|
|