我从需要通过SD/WAN网络ping远程办公室Cisco Catalyst开始。基本的ping命令工作得还可以接受,但大量的输出既令人生畏,也不是很有用。更具体地说,我需要的是远程Catalyst更改其ping状态时的日期和时间戳。无法到达的日期和时间,以及它再次可达的日期和时间。我不需要任何ping细节,只需要知道UP和DOWN发生的时间。我有一个脚本,它不能正常工作,所以我尝试简化它,而且它也不能正常工作。所以我转向你们,有没有其他人尝试过ping?
#!/bin/bash
skip=no
while :
do
if [[ `ping -c 1 $1 &> /dev/null` ]] && [[ skip = "no" ]]
then
echo "Target is up at: $(TZ='America/New_York' date)"
skip=yes
else
echo "Target is down at: $(TZ='America/New_York' date)"
skip=yes
fi
if ping -c 1 $1 &> /dev/null
then
skip=no
else
skip=yes
fi
sleep 5
done
谢谢:)
我得到的结果并没有达到我的预期。我在本地有另一个Catalyst,我在局域网上配置了它,将其连接到10.1.1.51,当我将其连接到网络的其余部分时,我得到了它已启动的日期戳和ping响应,运行正常,然后我拔下它,过了一会儿,我得到了另一个时间戳,它的关闭。然后另一个报告,它的关闭,一个,又一个。我认为这是一个边缘情况,我认为错误是在我的如果,然后,否则,fi逻辑,但我已经尝试了许多其他安排,要么“Ping成功”消息重复,或者“Ping失败”消息重复,但不是我想要的方式,这只是报告当状态改变,否则只是坐在那里测试和ping和等待状态改变。我已经很多年没有这样做了,嘿,必要性是发明之母,我想。:)
1条答案
按热度按时间4si2a6ki1#
我看到的第一件事是
[[
ping -c 1 $1 &> /dev/null]]
总是失败,因为它测试ping -c 1 $1 &> /dev/null
的输出是否为非空,并且由于输出被&> /dev/null
丢弃,因此它永远只会是空的。我认为您只需要ping -c 1 $1 &> /dev/null
(就像另一个if
语句一样),而不需要其他任何错误。skip
的逻辑看起来也很奇怪;我会把它完全去掉,然后有两个独立的子循环:一个是在它工作的时候,一个是在它失败的时候。大概是这样的: