概要
Raspberry Piで、Wi-Fiの接続が切れたときに自動で再接続するスクリプトを作成した。
背景と目的
自宅で使っているRaspberryPiのWi-Fi接続が、電波状況が悪いのかよく切れるので、切れたら自動で再接続するように、簡単なスクリプトを組む。
詳細
0. 参考
1. NetworkManger
NetworkManagerを使いたいので、インストールと設定をする。
1.1 インストール
sudo apt-get install -y network-manager
1.2 設定
/etc/NetworkManager/NetworkManger.confの設定
以下を変更
[ifupdown] managed=true
/etc/network/interfacesの設定
以下を追記
auto wlan0 iface wlan0 inet dhcp
1.3 再起動
sudo reboot
2. 自動再接続スクリプト
スクリプトを作成して、デーモン化する。
2.1 ソースコード
- wifi_auto_reconnect.sh
- nmcli connection show でIP4.ADDRESSという項目が出力されなければ切れているとみなして再接続する。
#!/bin/bash CONNECTION=$1 #接続名 INTERVAL=$2 # チェック周期[sec] WAIT=$3 # 起動時待ち時間[sec] echo "connection=$CONNECTION" echo "INTERVAL=$INTERVAL sec" # 起動時待ち時間 # すぐに動かしたくないので適宜入れる echo "waiting $WAIT sec..." sleep $WAIT # 繰り返し while true do # IPアドレスを取得 x=`nmcli c show $CONNECTION | grep IP4.ADDRESS` if [ "$x" == "" ]; then # IPアドレスが空なら接続されていないので接続 nmcli c up $CONNECTION fi # 待つ sleep $INTERVAL done
2.2 デーモン化
- wifi_auto_reconnect.service
- 開始時のチェック開始待ちは3分。チェック周期は60秒。
[Unit] Description=Wi-FiAutoReconnectDaemon After=NetworkManager-wait-online.target [Service] Type=simple ExecStart=/home/pi/wifi_auto_reconnect.sh 接続名 60 180 [Install] WantedBy=multi-user.target
実行権限を追加
sudo chmod 755 ./wifi_auto_reconnect.sh
配置
sudo cp ./wifi_auto_reconnect.service /etc/systemd/system
有効化
sudo systemctl enable wifi_auto_reconnect
開始
sudo systemctl start wifi_auto_reconnect
まとめと今後の課題
これで、とりあえず切れても復帰してくれそう。