Initial commit
This commit is contained in:
commit
b30f1f1e5e
1 changed files with 103 additions and 0 deletions
103
test.sh
Executable file
103
test.sh
Executable file
|
|
@ -0,0 +1,103 @@
|
|||
#!/bin/sh
|
||||
HOSTS_FILES="$HOME/.hosts_scanner"
|
||||
#HOSTS_FILES="/tmp/hosts"
|
||||
verbose=0
|
||||
res_file=$(mktemp -t hosts_scanner.XXXXXXXXXX)
|
||||
pids=""
|
||||
date_cmd="date --rfc-3339=s"
|
||||
|
||||
lock="${res_file}.lock"
|
||||
|
||||
clean_exit() {
|
||||
echo "Ctrl+C pressed, exiting..."
|
||||
for pid in $(echo $pids)
|
||||
do
|
||||
kill $pid
|
||||
echo $pid killed
|
||||
done
|
||||
rmdir ${res_file}.lock 2>/dev/null
|
||||
rm -v $res_file
|
||||
exit 0
|
||||
}
|
||||
|
||||
semlock() {
|
||||
while [ 1 ]
|
||||
do
|
||||
mkdir $1 2>/dev/null && break
|
||||
done
|
||||
}
|
||||
|
||||
semrelease() {
|
||||
rmdir $1
|
||||
}
|
||||
|
||||
trap clean_exit 2
|
||||
|
||||
upd_ping() {
|
||||
# update ping stat file
|
||||
# $1 host
|
||||
# $2 file
|
||||
# $3 lock
|
||||
lock="$3"
|
||||
last_up="never"
|
||||
|
||||
while [ 1 ]
|
||||
do
|
||||
rep=$(ping -qc 1 $1 2>/dev/null )
|
||||
ret=$?
|
||||
rep=$(echo $rep | sed -nE 's/.*rtt min\/avg\/max\/mdev = [0-9]+\.[0-9]+\/([0-9]+\.[0-9]+)\/.*$/\1/p')
|
||||
rehost=$(echo $h|sed 's/\./\\./g')
|
||||
|
||||
semlock $lock
|
||||
|
||||
|
||||
if [ $ret -eq 0 ]
|
||||
then
|
||||
last_up=$($date_cmd)
|
||||
#echo "${res}$rep $hstr $last_up" >> $2
|
||||
else
|
||||
rep="down"
|
||||
#echo "${res}down $hstr $last_up" >> $2
|
||||
fi
|
||||
|
||||
sed -i "s/^\\s*$rehost\\s.*$/$(printf "%30s %8s %30s\n" $1 $rep "$last_up")/" "$2"
|
||||
|
||||
semrelease $lock
|
||||
|
||||
sleep 5
|
||||
done
|
||||
}
|
||||
|
||||
for h in $(cat "$HOSTS_FILES")
|
||||
do
|
||||
printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
|
||||
done
|
||||
|
||||
for h in $(cat "$HOSTS_FILES" )
|
||||
do
|
||||
upd_ping $h $res_file $lock &
|
||||
pid=$!
|
||||
pids="${pids}\n$pid"
|
||||
echo "$h updated by $pid" >&2
|
||||
done
|
||||
sleep 1
|
||||
|
||||
while [ 1 ]
|
||||
do
|
||||
semlock $lock
|
||||
clear
|
||||
echo "Ping radar $($date_cmd)\n"
|
||||
printf "%30s %8s %30s\n" "host" "ping" "last up"
|
||||
for i in $(seq 70); do echo -n "="; done
|
||||
echo ""
|
||||
|
||||
#cat $res_file
|
||||
|
||||
#grep -v " down " $res_file
|
||||
#grep " down " $res_file
|
||||
|
||||
sed -E -e "s/\snever$/$(tput sgr0)\0/" -e "s/^.* down .*$/$(tput setaf 1)\0$(tput sgr0)/" $res_file
|
||||
|
||||
semrelease $lock
|
||||
sleep 1
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue