Ich habe das noch nie gelöst, aber es scheint, als könnte es gut für "Pfad-basierte Aktivierung" passen.
Anstelle einer "After="-Klausel in Ihrer Servicedatei würden Sie einen .path
erstellen Datei, wie in man systemd.path
beschrieben .
Finden Sie eine passende Datei unter /dev/bus/usb
oder /sys/bus/usb
, dessen Vorhandensein anzeigt, dass "USB aktiv ist". Dann haben Sie systemd
Überwachen Sie den Dateipfad mit .path
Datei, die Sie erstellen. Die .path
Datei würde dann Ihren .service
aktivieren Datei, wenn die Datei existiert.
Was ich tun würde, ist, eine systemd-Geräteeinheit zu erstellen Verwenden der udev-Regel. Beispiel:Erstellen Sie /etc/udev/rules.d/20-usb-bus.rules
mit:
KERNEL=="usb[1-2]", TAG+="systemd"
Beim nächsten Booten (oder Neuladen der udev-Regeln) haben Sie jetzt Ihre Systemgeräteeinheit:
# systemctl status dev-bus-usb-001-001.device
● dev-bus-usb-001-001.device - 2.0 root hub
...
# systemctl status dev-bus-usb-002-001.device
● dev-bus-usb-002-001.device - 3.0 root hub
...
Sie können Ihren Dienst jetzt starten lassen, nachdem der USB-Bus bereit ist, indem Sie Folgendes hinzufügen:
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
zu Ihrem systemd-Dienst.