旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【Mac】切れやすいWi-fiに自動で再接続するshell

久々すぎる更新です。

某企業のグループ会社を数年回ってお世話になってたのですが、ついにそこを辞め、完全にフリーとなり 1ヶ月ほど旅に出ていました。

さて、今回は帰ってきてからカフェでWi2へ接続してプログラムやサーバをいじっているわけですがなにせ切れる。 接続してから安定しないのです。 接続してもすぐに切れてしまう。 数秒から数分ごとに切れてしまうため、Macから再接続するのですが、いちいちWi-fiを切って再度入れるという無駄な作業をするわけです。

接続を安定させるためにネットワークの環境設定にネットワーク環境を追加すると良いという記事もあるのですが それでも変わらない場合泣き寝入りするしかないのですが せめてもWi-fiの再接続を自動化できればと思い、簡単なShellスクリプトを書いてみました。

とにかく切れる事象を少しでも軽減させたいだけなので、簡易的且つ雑なものですが。

要はWi2に接続しているが、外部へ接続できているかの死活監視みたいなものです。

サーバでもありがちなのですが、サーバが死んだら接続ができなくなるため それを事前に知りたい場合pingコマンドを使って接続ができているかを確認し、接続できない場合はアラートメールを送るというものの簡易版です。

仕組みとしてはpingを打って実行結果を見てエラーであればつなぎ直しを行う。 これだけです。

さっそくコードです。

#!/bin/sh

while true
do

/sbin/ping -W 3 -t 1 google.com>/dev/null

if [ $? -ne 0 ]; then

    echo "retry"

    networksetup -setairportpower en0 off

    networksetup -setairportpower en0 on

    echo "done"

    sleep 1

fi

echo "OK"

sleep 1

done

ちょっとインデントがおかしいですが、ささっとくんだものでご愛嬌汗

内容としては簡単ですね。 とにかく無限ループさせて、pingを打ちます。 その時にタイムアウトを1秒に設定、1回のみ検査します。

そこから実行した内容が成功していなければnetworksetupコマンドを発行してsetairportpowerをoffにしてからonにするというものです。

接続するまでに多少の時間がかかるのでsleepを入れています。 今のところ2秒以内に接続が完了するので、次pingを打つまでに多少の余裕を持たせています。

echoで再接続時及び繋がっているときはOKが出ています。ここは可視化したいだけなので不要ですね。

Youtubeとかであればストリーミングである程度見れるので、数秒のロスであれば再接続し直してくれて問題なく見れます。 ダウンロードとかも一時停止してくれてそこから再接続してくれるので普段使う感じでなんとか使えています。

にしても月額300円とはいえ接続が切れるのはいただけないですね・・・ 回線も細いっていうのもあるのですが。。。

贅沢は言えないですが、とにかくこれで根本解決とはいかないものの、自動接続してくれるので手間はなくなったかなと。

いいサービスがこれから出てくれればいいんだけどなぁ。