これまで解決したことはありませんが、「パスベースのアクティベーション」に適しているようです。
サービス ファイルに "After=" 句を含める代わりに、.path
を作成します。 man systemd.path
で説明されているファイル .
/dev/bus/usb
の下で適切なファイルを見つけます または /sys/bus/usb
、その存在は「USB が稼働中」であることを示します。次に systemd
を持っています .path
を使用してファイル パスを監視する 作成するファイル。 .path
ファイルは .service
を有効にします ファイルが存在する場合。
私なら、systemd デバイス ユニットを作成します。 udev ルールを使用します。例:create /etc/udev/rules.d/20-usb-bus.rules
と:
KERNEL=="usb[1-2]", TAG+="systemd"
次回の起動時 (または udev ルールのリロード時) に、システム デバイス ユニットが作成されます:
# 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
...
以下を追加することで、USB バスの準備が整った後にサービスを開始できるようになりました:
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
あなたのsystemdサービスに。