jumbo125
Anmeldungsdatum: 4. April 2023
Beiträge: 40
|
hallo zusammen
weiß jemand wie ein script aussehen soll, welches prüft, ob eine akjtive wlan verbindung besteht und falls nicht, soll es versuchen sich mit einem bestimmten netzwerk ssid zu verbinden? mein raspi baut nicht immer eine verbindung zum wlan her... manchmal schaltet sich das wlan vom repeater auch zu spät ein. daher würde ich gerne ein script alle 30-60 sekunden durchführen. das könnte ich einfahc über crontab... aber wie sieht das script aus?
ein einfaches linux/debian script danke euch
lg jumbo
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 809
Wohnort: Hamburg
|
mein Ansatz (umsetzen muss du es dann selbst):
Ping entweder auf dein Gateway oder eine dir bekannte Webseite die immer erreichbar ist Ist ping erfolgreich muss nichts gemacht werden da du ins internet/wlan Verbindung hast Klappt der ping nicht dann den Netzwerk dienst neustarten und erneut prüfen ob es erfolgreich war
Das ist grob wie ich beginnen würde, und beim Testen dann halt fein Tuning
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14347
|
jumbo125 schrieb: mein raspi baut nicht immer eine verbindung zum wlan her... manchmal schaltet sich das wlan vom repeater auch zu spät ein.
Wenn es sich um eine 24/7-Wlan-Verbindung handelt, könntest Du den den wpa_supplicant, mit einer _optimierten_ config für deinen Anwendungsfall (z. B. kein roaming, kein bg-scan, etc) kompilieren. Zum überwachen der Wlan-Verbindung eine timer-unit/service-unit und den wpa_cli mit einem action-Script für die Zustände connected bzw. disconnected benutzen. Aber wenn Du einen _benutzerdefinierten_ wpa_supplicant (mit der richtigen wpa_supplicant.conf-Datei; d. h. u. a. auch mit "hardcodierter" BSSID) hast/benutzt, wird es fast keine Unterbrechung in der Wlan-Verbindung geben.
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 809
Wohnort: Hamburg
|
was ich mich Frage, warum nutz du nicht Ethernet. Da hast du dann nicht das Problem mit dem WLAN?
|
jumbo125
(Themenstarter)
Anmeldungsdatum: 4. April 2023
Beiträge: 40
|
micneu schrieb: mein Ansatz (umsetzen muss du es dann selbst):
Ping entweder auf dein Gateway oder eine dir bekannte Webseite die immer erreichbar ist Ist ping erfolgreich muss nichts gemacht werden da du ins internet/wlan Verbindung hast Klappt der ping nicht dann den Netzwerk dienst neustarten und erneut prüfen ob es erfolgreich war
Das ist grob wie ich beginnen würde, und beim Testen dann halt fein Tuning
wenn ich den netzwerk dienst neu starte, versucht er automatisch eine verbindung herzustellen ?
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 809
Wohnort: Hamburg
|
gehe ich von aus. ich setze in meinem netzwerk die raspis nur mit ethernet ein. deshalb kann ich es nicht für dich testen.
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 9721
Wohnort: Münster
|
jumbo125 schrieb: […] weiß jemand wie ein script aussehen soll, welches prüft, ob eine akjtive wlan verbindung besteht und falls nicht, soll es versuchen sich mit einem bestimmten netzwerk ssid zu verbinden?
Das Wiki weiß, wie man eine solche Aufgabe lösen kann: NetworkManager/Dispatcher
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3790
|
aber wie sieht das script aus?
Hier ein grober Vorschlag, sicherlich ausbaufähig. Setzt voraus, daß die WLAN-Verbindung per NetworkManager hergestellt ist. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 | #! /bin/bash
if [ "$(whoami)" != "root" ]; then
echo "du musst root sein oder sudo benutzen"
echo && exit 1
fi
pruefhost1="www.debian.org"
pruefhost2="www.google.de"
wartezeit=60
wlanssid="deine wlan ssid"
wlanpsk="dein wlan kennwort"
# initiale wartezeit bei systemstart
sleep 120
while [ true ];do
echo
echo warte $wartezeit sek.
sleep $wartezeit
echo prüfe verbindung
ping $pruefhost1 -c 1 -W 1 &>/dev/null
if [ $? -eq 0 ]; then
echo verbunden
else
ping $pruefhost2 -c 1 -W 1 &>/dev/null
if [ $? -eq 0 ]; then
echo verbunden
else
echo nicht verbunden, beende NetworkManager.service
systemctl stop NetworkManager.service
sleep 10
echo starte NetworkManager.service
systemctl start NetworkManager.service
sleep 10
echo prüfe verbindung
ping $pruefhost1 -c 1 -W 1 &>/dev/null
if [ $? -eq 0 ]; then
echo verbunden
else
ping $pruefhost2 -c 1 -W 1 &>/dev/null
if [ $? -eq 0 ]; then
echo verbunden
else
echo nicht verbunden, verbinde zu $wlanssid
nmcli device wifi connect $wlanssid password $wlanpsk
fi
fi
fi
fi
done
|
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3790
|
Statt den PSK im Klartext ins Skript zu schreiben, kann man ihn auch "on the fly" aus der Verbindungsdatei auslesen: wlanpsk=$(cat /etc/NetworkManager/system-connections/$wlanssid.nmconnection | grep psk= | cut -d '=' -f 2)
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14347
|
jumbo125 schrieb: ... wlan verbindung besteht ...
BTW: Teste auch über einen geeigneten Zeitraum (z. B. ca. 48 Std) ob der (persistente) promisc mode der Wlan-NIC, einen positiven Einfluss auf den Signal level einer 24/7 Wlan-Verbindung hat.
|
wxpte
Anmeldungsdatum: 20. Januar 2007
Beiträge: 1388
|
dingsbums schrieb: aber wie sieht das script aus?
Hier ein grober Vorschlag, sicherlich ausbaufähig.
Verbesserungsvorschlag: statt den Exitstatus jedes Mal explizit abzufragen: | ...
ping $pruefhost1 -c 1 -W 1 &>/dev/null
if [ $? -eq 0 ]; then
...
|
könnte man das auch wie folgt formulieren:
| ...
if ping $pruefhost1 -c 1 -W 1 &>/dev/null; then
...
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14347
|
wxpte schrieb: könnte man das auch wie folgt formulieren:
| ...
if ping $pruefhost1 -c 1 -W 1 &>/dev/null; then
...
|
Ja, ... wenn man icmp via Internet (... und Namensauflösung mit ping) testen will/muss. Wenn man nur den Wlan-Zugang zum Router/Repeater/etc. prüfen will, geht auch lokal arp (statt icmp). Z. B.:
if /usr/bin/arping -c 5 -I wlan0 -f -q -w 5 -s 192.168.178.13 192.168.178.1 &>/dev/null; then
exit 0
else
... :~# arping -c 5 -I wlan0 -f -q -w 5 -s 192.168.178.13 192.168.178.1 &>/dev/null; echo $?
0 :~# arping -c 5 -I wlan0 -f -q -w 5 -s 192.168.178.13 192.168.178.2 &>/dev/null; echo $?
1
|