概要
ローカル上のモバイルルータとインターネット上のクラウドサーバへの接続状況をロギングするスクリプト
用途
モバイルルータ(以下、ルータ)を使ってIoTシステムなどを運用していると、インターネット接続が不安定になることがある。このとき、
- ルータが死んでいるのか
- ルータは生きているがインターネットへのアクセスが不安定になっているのか
といった原因の切り分けを行いたくなる。そこで、ルータとクラウドサーバへの接続状況をロギングすることで、不安定となる原因の分析を可能とする。
ついでに、ルータのグローバルIPも取得する。モバイルルータを使ったIoTシステムでは、ルータのグローバルIPが切り替わるときに、サーバとの接続が切れて、アプリに問題が生じたりするので、グローバルIPをロギングできるとシステムのデバッグに役立つ。
スクリプト
接続状況の確認にはpingを用い、グローバルIPの取得はcurlを用いている。
接続状況をロギングしたいルータとクラウドサーバのIPアドレスをそれぞれ、router_ipとserver_ipに設定し、実行すると日別のログファイルに接続状況が書きだされる。
実際に利用する場合は、このスクリプトをcronで定期実行している。
check_status.sh
# !/bin/sh
ulimit -c unlimited
date=`date +"%Y-%m-%d"`
status=`date +"%Y-%m-%d %H:%M"`
router_ip="192.168.XXX.XXX" #local router IP address
server_ip="YYY.YYY.YYY.YYY" #cloud server IP address
# send ping to local router
/bin/ping ${router_ip} -c 3 >> /dev/null
# check return value from local router
if [ $? -eq 0 ]; then
status=${status}" router:OK"
else
status=${status}" router:NG"
fi
# send ping to cloud server
/bin/ping ${server_ip} -c 3 >> /dev/null
# check return value from cloud server
if [ $? -eq 0 ]; then
status=${status}" server:OK"
else
status=${status}" server:NG"
fi
# get router's global IP address
status=${status}" GlobalIP:"`curl -m 20 ifconfig.me`
echo ${status} >> ./log/${date}.log