
Ich habe ein Skript, das ich in einen einmaligen systemd-Dienst umgewandelt habe. Dieser läuft auf einem Raspberry Pi und der Sinn besteht darin, dass er, wenn er keine Verbindung zum Internet herstellen kann, den WLAN-Adapter (?) neu konfiguriert, um ein Ad-hoc-Netzwerk zu erstellen und neu zu starten.
Mein Problem besteht darin, dass bei der Überprüfung noch keine IP-Adresse empfangen wurde und ich deshalb denke, dass keine Verbindung hergestellt werden kann.
Ich habe versucht, den After=
Parameter „be“ zu verwenden network-online.target
, aber das hat nichts geändert. Außerdem habe ich versucht, einen sleep
Befehl in das Skript selbst einzuführen, aber auch hier hat sich nichts geändert.
Irgendwelche Ideen?
Dies ist das Skript check_connection.sh
:
INTERFACE_NAME=$(iwconfig 2>/dev/null | grep -o "^\w*")
sleep 5;
if ifconfig $INTERFACE_NAME | grep -q "inet addr"
then
echo 'connected'
# if connected check if it's ad hoc mode or not
if iwconfig $INTERFACE_NAME | grep -q "Mode:Ad-Hoc"
then
echo 'start dhcp server'
# if running in ad hoc mode make sure server starts
sudo service isc-dhcp-server start
fi
else
echo 'not connected'
# if not connected switch settings to ad hoc and reboot
sudo cp /etc/network/interfaces-adhoc /etc/network/interfaces
sudo reboot
fi
/etc/systemd/system/check_connection.service:
[Unit]
Description=Check whether connected at startup
After=network-online.target
[Service]
User=root
ExecStart=/bin/bash /home/pi/check_connection.sh
[Install]
WantedBy=multi-user.target
BEARBEITEN
Das von mir verwendete Betriebssystem ist:Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux
Antwort1
Eine Lösung wäre, das ifupdown
Paket auf eine höhere Version (>= 0.8.9) zu aktualisieren, indem man die Debian-Backports verwendet (ichdenkendas sollte auf raspberian funktionieren), schau mal hierhttps://backports.debian.org/Instructions/. Anschließend müssen Sie das Paket aktualisieren ifupdown
.
Was hier passiert, ist, dass der network-online.target
keinen Dienst zieht und das bedeutet, dass er als „gestartet“ gilt, ohne tatsächlich auf etwas zu warten. Mit der neueren Version der ifupdown
Datei networking.service
, die die folgenden Zeilen enthält, bedeutet dies, dass der warten muss, network-online.target
bis er vollständig gestartet ist:
[Install]
WantedBy=multi-user.target
WantedBy=network-online.target
EDIT: Eine andere Möglichkeit wäre, After=networking.service
stattdessen