自宅のWi-Fiネットワークの調子が悪く、MacのWi-Fiの電源を切入しなければいけませんでした。
さすがに面倒になってきたので、Wi-FiデバイスのOff/Onを自動化しようと思います。
概要
ネットワークが正常か調べて、不調なときに電源を切入するスクリプトをcronで定期的に実行させます。
Wi-Fiネットワークデバイスの名前
networksetup -listnetworkserviceorder
で
Wi-Fiネットワークデバイスの名前を調べておきます。
自分はen0
でした。
スクリプト
下記のスクリプトを任意の場所に準備します。
(自分は/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