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.