OpenVPN接続がアップかダウンかを検出するコードがあります:
if echo 'ifconfig tun0' | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00"
then
echo "VPN up"
else
echo "VPN down"
fi
exit 0
現在、PPTPまたはIPSEC接続で動作するようにコードを書き直そうとしています。次のことを試みました:
if echo 'ifconfig ppp0' | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00"
またはipsecでも同じですが、機能しません。 PPTPまたはIPSEC接続を検出する他の方法はありますか?
次のスクリプトは次のようになります。
Sudo crontabの内容:
*/5 * * * * /home/userXXX/ISPConnectivity.sh >> /home/userXXX/ISPConnectivity.log 2>&1
ISPConnectivity.shスクリプトの内容:
#!/bin/bash
# add ip / hostname separated by white space
#HOSTS="1.2.3.4"
HOSTS="8.8.8.8 4.2.2.4"
# no ping request
totalcount=0
COUNT=4
DATE=`date +%Y-%m-%d:%H:%M:%S`
if ! /sbin/ifconfig tun0 | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00"
then
echo $DATE tun0 down
Sudo /home/userXXX/startVPN.sh start
else
for myHost in $HOSTS;
do
count=`ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }'`
totalcount=$(($totalcount + $count))
done
if [ $totalcount -eq 0 ]
then
echo $DATE $totalcount "fail"
Sudo /home/userXXX/startVPN.sh start
#else
# echo $DATE $totalcount "pass"
fi
fi
そのecho
ステートメントは誤りです。 @unwindが言うように、一重引用符( ')はバックティック( `)である必要があります。現在のコードはリテラル値ifconfig ppp0
をgrepに送信していますが、これは何の役にも立ちません。
しかし、実際にはバックティックも必要ありません。 ifconfig
の出力をgrep
ディレクトリに送信するだけです。 echo
を使用しても何も得られません:
if ifconfig ppp0 | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00"; then
echo ppp connection is up
fi
Nmcliコマンドを使用して、VPNが実行されているかどうかを確認することもできます。
nmcli c show --active | grep vpn
私は実際にもっと柔軟なソリューションを検討しています。例:
MyIP=$(curl http://api.ipify.org/?format=text)
if [ "$MyIP" != "MYORYGINALIP" ]
then
echo "IPSEC VPN is Running - " $MyIP
else
echo "IPSEC VPN is Not Running - " $MyIP
fi
exit 0
そのことについて何?どうにかして改善できますか?