YOCTOで構築された最小バージョンのLinuxを実行しているデバイス(Raspberry Piなど)があり、利用可能なネットワーク管理者はいません。特定の時点で/home/root/wpa.confファイルにネットワーク構成が存在する可能性がありますが、その構成が存在するときに対応するWi-Fiネットワークが検出されるという保証はありません(デバイスが移動する可能性があります)。継続的にWi-Fi接続を試み、失敗した場合は再試行するサービスを作成したいと思います。問題は、SSIDが見つからないとwpa_supplicantが終了しないことです。
これは私のサービスです。
[Unit]
After=network.target
[Service]
ExecStart=/home/root/connect_to_wifi.sh
Restart=always # this would be useful if wpa_supplicant exited on fail
StandardOutput=file:/home/root/connect_to_wifi.log
StandardError=file:/home/root/connect_to_wifi_error.log
[Install]
WantedBy=default.target
スクリプトは次のとおりです。
#!/bin/bash
ifconfig wlan0 up
udhcpc -i wlan0 -b
wpa_supplicant -i wlan0 -c /home/root/wpa.conf
このコマンドを実行した後、サービスが終了してwpa_supplicantが終了するため、wpa_supplicantから-Bを省略しました。サービスでtype = forkingを設定しようとしましたが、機能しません。しかし今回はそれが問題にならないと思います。
継続的に接続を試みるようにサービスとスクリプトを変更するにはどうすればよいですか?
答え1
wpaリクエスタは終了しないでください。 SSIDを「見つける」方法を誤って理解しているのです。 SSIDを見つけるには、ビーコンが表示されるのを待つ必要があります。 APのSSIDとBSSIDがわかっている場合は、登録パケットをAPに送信しようとしますが、単一の失敗応答は完全に正常である可能性があるため、これも何度も試みる必要があります。これは最終的に共有メディアです。そして、エントリポイントのRF環境で何が起こっているのかわかりません。
したがって、あなたが達成したいことは、私が知っているほとんどすべてのネットワーク接続マネージャ(systemdのNetworkManagerとwicd、Android接続マネージャ、Windows接続マネージャ、およびiOにあるもの)の観察可能な基本的な動作です。
したがって、率直に言って、誰もがすでに「利用可能な場合はこのネットワークに接続する」ことを提案しているとは思いません。
したがって、正しい解決策は、ネットワーク設定マネージャ(Raspberry Piの場合はNetworkManagerである可能性が高い)を設定してそのネットワークを見つけることです。それがすべてです。