プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

ラズパイのネットワーク瞬断を防止する

なぜかラズパイへのSSH接続が不定期に切断する

通常、ラズパイを用いた開発ではSSHWindows PCからアクセスしてるのですが、ルーターを変えてからSSH不定期に強制切断されてTeraTermが落ちる、ということが続いています。
ネットワークが切れているだけで、HDMIでモニター出力してみると、ラズパイは生きているのですが、Windows PCからのpingが届かないような状況です。
また、ラズパイでGUIのブラウザを一度起動するとアクセスが復活する、という状況です。

TeraTermにもこのような現象に対応する機能があるようなのですが、私の状況下では効果がありませんでした。

対策

shellスクリプトで定期的に適当なところにpingを打ち続けることで解決しました。

#!/bin/bash
while :
do
	ping 172.16.80.29 -c 1 >> /dev/null
	sleep 30
done

これをping.shとしてhomeに保存します。

pingはそのまま、pingを打ちます。
パラメータの-c 1は1回という指定です。
>> /dev/nullはそのレスポンス結果を破棄する、というものです。
これを30秒ごとにループします。
ターゲットのipアドレスはローカルで、使われていないアドレスです(DHCPだと何かが設定される可能性はありますが)。

自動起動する

これをラズパイ起動時に実行することでSSHが切れることがなくなりました。
これは常に実行したいので、ラズパイ起動時に自動起動するように設定します。
ラズパイ起動時に自動実行する方法は各種ありますが、一番簡単な方法(個人の感想です)で設定しました。

$ sudo vim /etc/rc.local

このファイルのexit 0の上に

sh /home/raspberrypi0/ping.sh

を追記します。
f:id:s51517765:20211122142741p:plain

再起動します。
ping.shが起動されていれば成功です。
f:id:s51517765:20211122142852j:plain

また、複数設定したい場合は末尾に &を付けます。
f:id:s51517765:20211122143630p:plain

まとめ

ラズパイでの自動実行とこれを用いてSSHが切れる対策をしました。
rainbow-engine.com
webbibouroku.com
rikoubou.hatenablog.com