Je n'ai pas résolu ce problème auparavant, mais il semble que cela pourrait convenir à "l'activation basée sur le chemin".
Au lieu d'avoir une clause "After=" dans votre fichier de service, vous créeriez un .path
fichier, comme décrit dans man systemd.path
.
Trouvez un fichier approprié sous /dev/bus/usb
ou /sys/bus/usb
, dont la présence indique que "USB est actif". Alors avoir systemd
surveiller le chemin du fichier en utilisant le .path
fichier que vous allez créer. Le .path
le fichier activerait alors votre .service
fichier lorsque le fichier existe.
Ce que je ferais, c'est de créer une unité de périphérique systemd en utilisant la règle an udev. Ex. :créer /etc/udev/rules.d/20-usb-bus.rules
avec :
KERNEL=="usb[1-2]", TAG+="systemd"
Au prochain démarrage (ou rechargement des règles udev), vous aurez maintenant votre unité de périphérique système :
# 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
...
Vous pouvez maintenant faire démarrer votre service une fois que le bus USB est prêt en ajoutant :
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
à votre service systemd.