Немного поразвлекался, сваял скриптик. Суть - пингует пачку серверов параллельными потоками.
Синтаксис прост как грабли: скрипт опции хосты
(на самом деле опции и хосты можно вперемешку)
Опции:
-c|--color) # Colored output
-u|--units) # Show measurements units
-t|--timeout) # Set different timeout
-a|--accessible-only) # Do not show servers which are unavailable
Минусы обусловлены асинхронной работой: никакой сортировки, параллельные потоки "корректируют" время отклика в худшую сторону (например, мой модем в пачке с десятком других хостов откликается порядка 30ms при обычных 1-2ms).
В общем, так, если кому интересно поковырять. А так он и мне-то не нужен %)
А автору топика стоило бы хоть привести пример, что он хочет видеть и как запускать (одной командой пачку али каждый хост отдельно).
srv_check.sh
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#!/bin/sh
###
#
# @author lava
#
# Check list of servers on availability
#
# Default options
TIMEOUT=1
#
# Get options from command-line arguments
SHORTOPTS='Qcut:a'
LONGOPTS='query,color,units,timeout:,accessible-only'
ARGS=$(getopt -a -n $(basename "$0") \
-o ${SHORTOPTS} \
-l ${LONGOPTS} \
-- "$@" \
2>/dev/null)
eval set -- "$ARGS"
#
# Parse args
while [[ "${1}" != -- ]]
do
case "${1}" in
-Q|--query) # Quick query mode for single host
QUERY=true
;;
-c|--color) # Colored output
COLOR=true
;;
-u|--units) # Show measurements units
UNITS=true
;;
-t|--timeout) # Set different timeout
TIMEOUT=${2}
shift
;;
-a|--accessible-only) # Do not show servers which are unavailable
ACCESSIBLE=true
;;
esac
shift
done
shift # Remove last processed key
if [ "$QUERY" = "true" ]
then
###
#
# Query mode accepts only a single host to ping and give an output information
#
HOST=$1
PING_RESULT=`ping -c1 -W$TIMEOUT $HOST 2>&1`
if [ $? = 0 ]
then
[ "$COLOR" = "true" ] && RESULT="\033[32m" || RESULT=""
[ "$UNITS" = "true" ] && UNITSED="\3" || UNITSED=""
RESULT=$RESULT`echo "$PING_RESULT" | sed -nr "s/^.*time=([0-9]+(\.[0-9]+)?)(\s*[a-zA-Z-]+).*$/\1$UNITSED/p"`
else
[ "$ACCESSIBLE" == "true" ] && exit 1
[ "$COLOR" = "true" ] && RESULT="\033[31m" || RESULT=""
RESULT="$RESULT"OFFLINE
fi
[ "$COLOR" = "true" ] && RESULT=$RESULT"\033[0m"
echo -e "$HOST: $RESULT"
else
###
#
# Manager mode: will launch separate instance for every host and wait them all
#
BIN=`readlink -f "$0"`
for HOST in $@
do
OPTS="-t$TIMEOUT"
[ "$COLOR" = "true" ] && OPTS="$OPTS -c"
[ "$UNITS" = "true" ] && OPTS="$OPTS -u"
[ "$ACCESSIBLE" = "true" ] && OPTS="$OPTS -a"
$BIN -Q $OPTS $HOST &
PID_LIST="$PID_LIST $!"
done
wait
fi
|