サーバーがインターネットに接続されているかどうかを確認したいです。次のスクリプトを試しましたが、失敗しました。このスクリプトは 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]
単なる入力ミスでしょうか?