我想检查服务器是否已连接到互联网。我尝试过以下脚本,但没有成功,该脚本每 5 分钟运行一次,检查服务器是否已连接到互联网,并发送电子邮件。
ping -c 3 192.168.0.25 > /dev/null 2>&1
if [ $? -eq 0 ]
then
mailx -s "Server is Up" -t "[email protected]" < /dev/null
fi
但问题是,一旦建立连接,我就会每 5 分钟收到一封电子邮件。我该如何解决这个问题?
答案1
因为你不想收到状态通知,而是想收到状态变更通知。所以你必须记住之前的状态,例如:
#! /bin/bash
statusFile=/var/tmp/connected # used to remember status
pingedHost=8.8.8.8
checkPeriod=5 # seconds
while true
do
echo "Sleeping..."
sleep $checkPeriod
echo "Checking..."
ping -c 1 $pingedHost > /dev/null 2>&1
if [[ $? -eq 0 ]]
then
echo "Ping OK..."
if [[ ! -f $statusFile ]] # not connected already
then
echo "Reconnected..."
# send reconnection mail here
touch $statusFile # remember state
fi
else
echo "Ping KO..."
if [[ -f $statusFile ]] # was connected before
then
echo "Disconnected..."
# send disconnection mail here
rm $statusFile # remember state
fi
fi
done
答案2
检查结果是否为零而不是 -e 会更好,对吗?
if [$? -eq 0]
或这个
if [$? -e 0]
只是打字错误吗?