Saya belum memecahkan ini sebelumnya, tetapi sepertinya ini cocok untuk "aktivasi berbasis jalur".
Alih-alih memiliki klausa "After=" di file layanan Anda, Anda akan membuat .path file, seperti yang dijelaskan dalam man systemd.path .
Temukan file yang cocok di bawah /dev/bus/usb atau /sys/bus/usb , yang kehadirannya menunjukkan bahwa "USB sudah habis". Kemudian miliki systemd pantau jalur file menggunakan .path file yang akan Anda buat. .path file kemudian akan mengaktifkan .service Anda file ketika file tersebut ada.
Yang akan saya lakukan adalah membuat unit perangkat systemd menggunakan aturan udev. Misalnya:buat /etc/udev/rules.d/20-usb-bus.rules dengan:
KERNEL=="usb[1-2]", TAG+="systemd"
Pada boot berikutnya (atau memuat ulang aturan udev), Anda sekarang akan memiliki unit perangkat sistem Anda:
# 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
...
Sekarang Anda dapat memulai layanan setelah bus USB siap dengan menambahkan:
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
ke layanan systemd Anda.