Ještě jsem to neřešil, ale zdá se, že by to mohlo být vhodné pro "aktivaci založenou na cestě".
Místo klauzule "After=" v souboru služby byste vytvořili .path
soubor, jak je popsáno v man systemd.path
.
Najděte vhodný soubor pod /dev/bus/usb
nebo /sys/bus/usb
, jehož přítomnost indikuje, že „USB je aktivní“. Pak mějte systemd
sledujte cestu k souboru pomocí .path
soubor, který vytvoříte. .path
soubor by pak aktivoval váš .service
soubor, když soubor existuje.
Co bych udělal, je vytvořit systemd device unit pomocí pravidla udev. Např.:vytvořte /etc/udev/rules.d/20-usb-bus.rules
s:
KERNEL=="usb[1-2]", TAG+="systemd"
Při příštím spuštění (nebo opětovném načtení pravidel udev) nyní budete mít jednotku systémového zařízení:
# 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
...
Nyní můžete spustit službu, jakmile bude sběrnice USB připravena, přidáním:
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
do vaší služby systemd.