Mac で ping 応答がなかったら WiFi を再起動する bash スクリプト
公衆無線 WiFi (wi2) などでネットワークがよく切れることがあり、都度再接続するのが面倒だったので。
WiFi 再起動ではなく接続先を変えるでも目的は達成できそう。とりあえずこれを走らせておくことでネットワークの切断を気にする必要はなくなった(切断されることそれ自体は許容するしかない)
しくみ
ループ内の sleep や NIC の番号などは適当に調整する。
#!/bin/bash function restartEn0 () { networksetup -setairportpower en0 off networksetup -setairportpower en0 on } function checkPing () { ping -c 1 -W 5 google.com &> /dev/null if [ $? = 0 ]; then echo 1 else echo 0 fi } while : do response=`checkPing` if [ ${response} -eq 0 ]; then echo "`date +%Y-%m-%d\ %H:%M:%S`: connection lost. reconnecting..." restartEn0 sleep 10 else echo "`date +%Y-%m-%d\ %H:%M:%S`: connection is stable" fi sleep 5 done