No he resuelto esto antes, pero parece que podría ser una buena opción para la "activación basada en rutas".
En lugar de tener una cláusula "Después=" en su archivo de servicio, crearía un .path
archivo, como se describe en man systemd.path
.
Encuentre un archivo adecuado en /dev/bus/usb
o /sys/bus/usb
, cuya presencia indica que "USB está activo". Entonces ten systemd
monitorear la ruta del archivo usando el .path
archivo que creará. El .path
entonces activaría su .service
archivo cuando el archivo existe.
Lo que haría sería crear una unidad de dispositivo systemd utilizando la regla an udev. Por ejemplo:crear /etc/udev/rules.d/20-usb-bus.rules
con:
KERNEL=="usb[1-2]", TAG+="systemd"
En el próximo arranque (o en la recarga de las reglas de udev), ahora tendrá la unidad de dispositivo de su sistema:
# 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
...
Ahora puede hacer que su servicio comience después de que el bus USB esté listo agregando:
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
a su servicio systemd.