Raspberry Pi Zero Wがwifiでネットワークに接続されているが、時々そこにアクセスできなくなる。
自動で再起動してくれればありがたい。
(この記事は書いた時点ではちゃんと動作するか未検証である、しばらく動かしてつながらない状態がなくなれば動いてるに違いないということになる。とはいえログ見れば動作はわかるが。)
環境
- Raspberry Pi Zero W
- Raspbian GNU/Linux 10 (buster)
- (ぼちぼち更新しないといけないな…)
方法1. watchdogデーモンを使う
watchdogデーモンは、pingが通らない場合にシステム自体を再起動するような設定が可能であるらしい。
利用法
インストール
sudo apt install watchdog
設定ファイルのバックアップ
$ sudo cp /etc/watchdog.conf /etc/watchdog.conf.backup
設定
sudo nano /etc/watchdog.conf
次のように設定を変更する。
(2026-01-12更新: ↓この設定方法だと動かない気がする。なんでこれで普通に使えてたのか。単に動いてなかった可能性もある。)
interface = wlan0 # ネットワークインタフェースとしてwlan0を使う ping = 192.168.1.1 # ping先のIPアドレス(環境に応じて変える) interval = 300 # 300秒(5分)毎にチェック
(2026-01-12追記)
デフォルトのwatchdog-timeoutが60秒らしく(?)、intervalはそれよりも短くないといけない、再起動までの時間はretry-timeoutで指定するっぽい。
ラズパイのハードウェアwatchdogタイマーの最大が15秒とからしく、この秒数でいいのかもよくわからない。
interface = wlan0 # ネットワークインタフェースとしてwlan0を使う ping = 192.168.1.1 # ping先のIPアドレス(環境に応じて変える) interval = 20 # 20秒毎にテスト retry-timeout = 300 #300秒(5分)pingが通らなかったら再起動
とかかなあ。で有効にしておく。
sudo systemctl enable watchdog
(追記終)
その後再起動する。
備考
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に書くなどして定期実行させるようにする。
ネットワーク再接続のコマンドはいくつかのやり方があるっぽいが、どれが動くかわからないので、動くものを選ぶ必要があるかもしれない。