Raspberry Piで時間が経過するとwifiが繋がらなくなる
先日ラズパイをNAS化してデータ共有が行える手順を記事にしました。
elsammit-beginnerblg.hatenablog.com
我が家でもラズパイをNASとして運用していこうとしたのですが、、、
しばらくするとネットワークにアクセス出来ないようになってしまいました😢
せっかくNAS化したのに全然用いることが出来ない。。
今回はなぜネットワークにアクセスできなくなったのか、、
その理由と解決方法についてまとめたいと思います!!
■原因調査
ラズパイにping通らない状況だったので、
「ラズパイ固まったのかな?」
と思い、ラズパイ側の動作確認を実施いたしました。
ラズパイにディスプレイを接続すると画面が表示される。
そして、キーボードやマウスも操作できる。。
さらに
ip a
コマンドで無線lanを確認したのですが、ipアドレスは変わっていない。
そして、ラズパイからはホストPCへpingも通る。。
何があったのだろう🤔と思い、再度ホストPC側も再度pingを確認。
すると、、、
pingが通るではありませんか!!
何があったか分からなかったのですが、その日は夜も遅かったのでそのままにして次の日。
また同じ現象が発生している!!😢どういうことだ??
調べてみたところ、どうやら、、
「ラズパイ側のwifiモジュールがスリープしてしまっていた」
ようです!!
wifiモジュールがスリープしてしまうので、ネットワークアクセスが出来ていなかったわけですね。
そして、ラズパイ側でネットワークに関する操作を行うとスリープ復帰するので、
以降はホストPCからアクセスできるようになる。
そしてそして、、時間経過で再度スリープに入るのでネットワークがアクセスできない。
というループが起こってしまっていました。
■試したこと1
ということで、、解決策は
「wifiモジュールをスリープに入れない」
ことになります。
そこで方法を調べてみたところ、
コマンドでスリープに入らないようにするための方法があったので試してみました。
まずこちらのコマンドを実行します。
iwconfig
すると、
Power Management:on
といったメッセージが出力されます。
これは、
パワーマネジメントモードがonであり、
「低電力のためにスリープ移行する」
ことを意味しているようです!!
こちらをoffにするためには、
sudo iwconfig wlan0 power off
とコマンドを実行すればOK。
再度、
iwconfig
を実行すると、
Power Management:off
に変わっているかと思います。
こちらをoffにする方法は上記コマンド以外にも、
/etc/network/interfacesに対して、
allow-hotplug wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf wireless-power off
と追記しても同様にoffにすることが出来ます。
先ほどのコマンド実行の場合には起動するたびに実行する必要があるのですが、
こちらのinterfacesに記載する方法は、一度登録しておけばOKになります。
しかしながら、、、
こちらの方法ではうまく行きませんでした。。。
時間が経つとやはりスリープに入ってしまいました。。。
■試したこと2
次に試したことは、
「無線lanの再接続を行う」
です。
どうせネットワークに接続出来ないので、無線を再起動させてしまえ!!
という発想です。
スリープに入った場合には再起動を行うスクリプトを作成し、定期的に状態監視+無線lan再起動を行うようにしました。
まずはスクリプトです。
#!/bin/sh ping -c 1 [gw_address] test $? -eq 1 && sudo ifconfig wlan0 up
そしてこちらのスクリプトをcronで定期実行するようにしました。
cronへの定期実行追記ですが、
sudo crontab -u root -e
を実行するとcrontabが開きますので、末尾にこちらを追記します。
*/1 * * * * sh スクリプトパス
こちらの意味ですが、1分毎にスクリプトを実行する、となります。
■最後に
試したこと2ですと今のところスリープに移行してないです!!
もう少し様子見してみたいと思います!!
これで解決しているといいな。