4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Macで不調なWi-Fiに繋いでいるときに自動でON/OFFするスクリプト

Posted at

自宅のWi-Fiネットワークの調子が悪く、MacのWi-Fiの電源を切入しなければいけませんでした。
さすがに面倒になってきたので、Wi-FiデバイスのOff/Onを自動化しようと思います。

概要

ネットワークが正常か調べて、不調なときに電源を切入するスクリプトをcronで定期的に実行させます。

Wi-Fiネットワークデバイスの名前

networksetup -listnetworkserviceorder
Wi-Fiネットワークデバイスの名前を調べておきます。
自分はen0でした。

ネットワークデバイスの名前.png

スクリプト

下記のスクリプトを任意の場所に準備します。
(自分は/Users/ken1flan/bin/fix_wifi.sh)
コードの説明はコメントを参照してください。

fix_wifi.sh
TARGET_HOST=google.co.jp
LOG_FILE=/tmp/fix_wifi.log
DEVICE=en0
PATH=:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH

# LOG_FILEで指定したファイルに、日時とともに指定された文字列を追記する。
function _write_log {
  echo "`date +\"%Y/%m/%d %H:%M:%S\"` $1" >> $LOG_FILE
}

# DEVICEで指定したネットワークデバイスの電源を確認する。ONのときに0が返す。
function _check_device {
  networksetup -getairportpower $DEVICE | grep 'On$' > /dev/null 2>&1
}

# TARGET_HOSTにpingが到達したことをもってネットワークが正常であるとする。正常のときに0を返す。
function _check_network {
  ping -c 3 -t 3 $TARGET_HOST > /dev/null 2>&1
}

# DEVICEで指定したネットワークデバイスの電源を切入してリセットする。
function _reset_device {
  networksetup -setairportpower $DEVICE off
  networksetup -setairportpower $DEVICE on
}

_write_log "Start"

# ネットワークデバイスに電源が入っていない場合は何もしない。
_check_device
if [ $? != 0 ]; then
  _write_log "Device is off"
  return 0
fi

# ネットワークが不調だったらネットワークデバイスをリセットする。
_check_network
if [ $? != 0 ]; then
  _write_log "Network is not work"
  _reset_device
  _write_log "Device was reset"
fi

cronで定期実行

crontab -e で下記を登録し、5分毎にスクリプトが実行されるようにします。

*/5 * * * * /usr/local/bin/bash /Users/ken1flan/bin/fix_wifi.sh

参考

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?