好吧所以我需要不断监控多个路由器和计算机,以确保它们保持在线状态。我找到了一个很棒的脚本here,如果单个ip无法ping通,它会通过咆哮通知我(所以我可以在手机上收到即时通知)。我一直在尝试修改脚本以ping多个地址,运气不佳。在脚本持续观看在线服务器时,我无法弄清楚如何ping下来的服务器。任何帮助将不胜感激。我没有做太多的shell脚本,所以这对我来说很新鲜。
由于
#!/bin/sh
#Growl my Router alive!
#2010 by zionthelion73 [at] gmail . com
#use it for free
#redistribute or modify but keep these comments
#not for commercial purposes
iconpath="/path/to/router/icon/file/internet.png"
# path must be absolute or in "./path" form but relative to growlnotify position
# document icon is used, not document content
# Put the IP address of your router here
localip=192.168.1.1
clear
echo 'Router avaiability notification with Growl'
#variable
avaiable=false
com="################"
#comment prefix for logging porpouse
while true;
do
if $avaiable
then
echo "$com 1) $localip avaiable $com"
echo "1"
while ping -c 1 -t 2 $localip
do
sleep 5
done
growlnotify -s -I $iconpath -m "$localip is offline"
avaiable=false
else
echo "$com 2) $localip not avaiable $com"
#try to ping the router untill it come back and notify it
while !(ping -c 1 -t 2 $localip)
do
echo "$com trying.... $com"
sleep 5
done
echo "$com found $localip $com"
growlnotify -s -I $iconpath -m "$localip is online"
avaiable=true
fi
sleep 5
done
答案 0 :(得分:1)
最简单的方法是将此脚本包装为另一个创建N个进程的脚本。假设您的脚本被称为“watchip”,然后将文本放入另一个脚本
watchip 10.0.1.1 &
watchip 10.0.1.2 &
watchip 10.0.1.3 &
etc
并在watchip内将localip设置为$ 1。
答案 1 :(得分:0)
将localip=192.168.1.1
更改为:
localip=$1
这允许将IP地址作为命令行参数传入。然后,您可以运行在不同IP地址中传递的脚本的多个副本。然后,您可以创建一个主脚本来运行监视脚本的多个副本。假设您发布的脚本是monitor.sh
:
#!/bin/sh
monitor.sh 192.168.1.1 &
monitor.sh 192.168.2.2 &
monitor.sh 192.168.3.3 &
wait
答案 2 :(得分:0)
我认为没有必要运行多个脚本。这是一个监视IP地址列表的通用脚本,并记录ping成功的变化......
#!/bin/bash
set 10.0.0.1 10.0.0.2 # etc
trap exit 2
while true; do
i=1
for ipnumber in "$@"; do
statusname=up$i
laststatus=${!statusname:-0}
ping -c 1 -t 2 $ipnumber > /dev/null
ok=$?
eval $statusname=$ok
if [ ${!statusname} -ne $laststatus ]; then
echo status changed for $ipnumber
if [ $ok -eq 0 ]; then
echo now it is up
else
echo now it is down
fi
fi
i=$(($i + 1))
done
sleep 5
done
答案 3 :(得分:0)
保留两个阵列。一个有可用的IP;另一个没有可用的。当状态更改时,将它们移动到另一个数组。无需多个后台进程。
我省略了日志记录的内容。您可以将其重新添加。这是未经测试的代码。
available=(192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4)
unavailable=()
while true
do
for index in ${!available[@]}
do
if ! ping -c 1 -t 2 ${available[index]}
then
growlnotify -s -I $iconpath -m "${available[index]} is offline"
unavailable+=(${available[index]})
unset "available[index]"
fi
done
for index in ${!unavailable[@]}
do
if ping -c 1 -t 2 ${unavailable[index]}
then
growlnotify -s -I $iconpath -m "${unavailable[index]} is back online"
available+=(${unavailable[index]})
unset "unavailable[index]"
fi
done
done