Wie sage ich in der systemd-Servicedatei "nachdem USB bereit ist"?

672
Nick Lee

Ich habe ein Programm, das auf Raspbian Stretch läuft und über USB mit einem Mobiltelefon kommuniziert. Dabei wird ein spezielles Protokoll verwendet, das auf libusb implementiert ist.

Ich möchte, dass das Programm beim Start ausgeführt wird, also erstelle ich eine systemd-Servicedatei, weiß aber nicht, nach welchem ​​Ziel es laufen soll:

[Unit] Description=My Program After=network.target <-- ???  [Service] ExecStart=/home/pi/myprogram User=root  [Install] WantedBy=multi-user.target 

Dieser Inhalt kann die Aufgabe erfüllen, aber was sollte danach richtig sein? Wie kann ich sagen "nachdem USB fertig ist"?

Die meisten Informationen, die ich im Internet finden kann, betreffen das Einrichten von udev-Regeln. Ich verstehe das Laden eines Kernel-Moduls, wenn ein bestimmtes Gerät angezeigt wird. Ich glaube nicht, dass es das ist, was ich will.

Jede Hilfe wird geschätzt.

2

1 Antwort auf die Frage

1
Mark Stosberg

Ich habe das bisher noch nicht gelöst, aber es scheint, als könnte es eine "pfadbasierte Aktivierung" sein.

Anstelle einer "After =" - Klausel in Ihrer Servicedatei würden Sie eine .pathDatei erstellen, wie in beschrieben man systemd.path.

Suchen Sie unter /dev/bus/usboder eine geeignete Datei /sys/bus/usb, deren Anwesenheit "USB ist in Betrieb" anzeigt. Dann haben Sie systemdden Dateipfad überwacht die Verwendung von .pathDatei Sie erstellen. Die .pathDatei würde Ihre .serviceDatei dann aktivieren, wenn die Datei vorhanden ist.

Vielen Dank. Ich überwache schließlich den Pfad `/ dev / bus / usb / 001`. Dort befindet sich der USB-Bus von Raspberry Pi. Für alle, die sich für ein konkretes Beispiel interessieren, ist [hier] (https://unix.stackexchange.com/a/203661/186939) eine weitere schöne Antwort. Nick Lee vor 5 Jahren 0