工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

Wi-Fiの自動再接続スクリプト

概要


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


まとめと今後の課題


これで、とりあえず切れても復帰してくれそう。