ほんとの手

主に開発や仕事のメモクリップ

Mac で ping 応答がなかったら WiFi を再起動する bash スクリプト

公衆無線 WiFi (wi2) などでネットワークがよく切れることがあり、都度再接続するのが面倒だったので。

WiFi 再起動ではなく接続先を変えるでも目的は達成できそう。とりあえずこれを走らせておくことでネットワークの切断を気にする必要はなくなった(切断されることそれ自体は許容するしかない)

しくみ

  • while で常時監視
  • ping -c 1 して応答があるかないかを確認
  • 応答がなかったら networksetup で WiFiNIC を off -> on する

ループ内の 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