Kleines Beispiel:
Auf einem meiner Rechner soll beim booten über ein Mount-Unit eine SMB-Freigabe eingebunden werden und dieses hat logischerweise das "network-online.target" als Abhängigkeit drin, denn ohne funktionierendes Netzwerk ist ja auch kein SMB-Server erreichbar. Da aber "network-online.target" wegen dem Verhalten von "/usr/bin/nm-online" viel zu früh auf ready geht scheitert das mounten jedoch kläglich.
Klar könnte man in diesem speziellen Beispiel jetzt so lange an diesem Mount-unit herumbasteln bis es trotzdem funktioniert aber es gibt ja auch andere Dinge die erst starten dürfen wenn das Netzwerk wirklich da ist. Und einen eventuellen Workaround an vielen stellen rein zu basteln ist keine Lösung.
Da ich nicht in der Lage bin das Verhalten von "/usr/bin/nm-online" zu ändern habe ich für mich nun folgendes gemacht:
1. In der Konfiguration vom NetworkManager die Konnektivitätsüberwachung konfiguriert (nein das Programm "/usr/bin/nm-online" interessiert sich nicht dafür).
Code: Select all
...
[connectivity]
uri=http://nmcheck.gnome.org/check_network_status.txt
interval=60
...Code: Select all
#!/usr/bin/python
import argparse, dbus, time
parser = argparse.ArgumentParser()
parser.add_argument("-cs", "--connectivity_state", nargs='?', metavar='0..4', type=int, choices=[0, 1, 2, 3, 4], default=4,
help="Which connectivity status to wait for (Default is 4). Please read the following website for more information. https://developer.gnome.org/NetworkManager/stable/nm-dbus-types.html#NMConnectivityState")
parser.add_argument("-t", "--timeout", nargs='?', type=int, default=10,
help="How long the script should wait for the specified connectivity before reaching the timeout. (Default is 10 seconds)")
args = parser.parse_args()
bus = dbus.SystemBus()
nm = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
counter = 0
while counter < args.timeout:
connectivity = nm.Get('org.freedesktop.NetworkManager', 'Connectivity', dbus_interface='org.freedesktop.DBus.Properties')
if connectivity == args.connectivity_state:
exit(0)
else:
counter = counter + 1
time.sleep(1)
exit(1)Code: Select all
[Unit]
Description=Waiting for NetworkManager Connectivity
Requires=NetworkManager.service
After=NetworkManager.service
Before=network-online.target
[Service]
Type=oneshot
ExecStart=/opt/nm-connectivity.py -cs 4 -t 30
RemainAfterExit=yes
[Install]
WantedBy=network-online.targetDer Grund warum ich das im Diskussionsforum poste ist weil das weder eine Anleitungs- noch ein HelpMe-Thread werden sollte sondern weil ich das Verhalten von "/usr/bin/nm-online" einfach mal generell ansprechen und meine bisherigen Lösungsversuche dazu zeigen wollte.
Was sind eure so Erfahrung mit "/usr/bin/nm-online"?
Hier noch ein interessanter Link zu dem Thema:
https://bugzilla.redhat.com/show_bug.cgi?id=1759956
