にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

Raspberry Piがwifiから切断されたら再接続する

Raspberry Pi Zero Wがwifiでネットワークに接続されているが、時々そこにアクセスできなくなる。
自動で再起動してくれればありがたい。

(この記事は書いた時点ではちゃんと動作するか未検証である、しばらく動かしてつながらない状態がなくなれば動いてるに違いないということになる。とはいえログ見れば動作はわかるが。)

環境

方法1. watchdogデーモンを使う

watchdogデーモンは、pingが通らない場合にシステム自体を再起動するような設定が可能であるらしい。

利用法

インストール
sudo apt install watchdog
設定ファイルのバックアップ
$ sudo cp /etc/watchdog.conf /etc/watchdog.conf.backup
設定
sudo nano /etc/watchdog.conf

次のように設定を変更する。

interface = wlan0    # ネットワークインタフェースとしてwlan0を使う
ping = 192.168.1.1   # ping先のIPアドレス(環境に応じて変える)
interval = 300        # 300秒(5分)毎にチェック

その後再起動する。

備考

watchdogデーモンは、設定したような個所について何か問題が発生した場合、システム自体を再起動するものであるらしい。
そのため、ネットワークがない状態だと再起動を繰り返すことになる。
ネットワークに繋がってなくても動き続けてほしい場合は不適かもしれない。

方法2. スクリプトを使う方法

Raspberry PiでWi-Fi切断時、自動的に再接続されるようにする方法 #RaspberryPi - Qiita
このページで自動で再起動を行うスクリプトが公開されている。
スクリプトが古いため、wifi再設定コマンドは変更の必要がある。

次のような内容でreconnect.shを作成する(デフォルトゲートウェイが192.168.1.1の場合)。

#!/bin/sh
ping -c 1 192.168.1.1
test $? -eq 1 && sudo wpa_cli -i wlan0 reconfigure

その後、実行権限を追加し、crontabに書くなどして定期実行させるようにする。

ネットワーク再接続のコマンドはいくつかのやり方があるっぽいが、どれが動くかわからないので、動くものを選ぶ必要があるかもしれない。