web-dev-qa-db-ja.com

存在するデバイスに依存するsystemdサービスを作成するにはどうすればよいですか?

USB WiFiドングルの存在に依存するsystemdサービスを書きたいのですが。デバイスが接続されていないときに起動しない限り、デバイスが接続されているときに起動する必要はありません。これを行うにはどうすればよいですか?

Systemd構成ファイルはnetwork @ .conf形式です。 %iプレースホルダーを使用します。だから私はこれをユニットファイルに追加してみました:

[Path]
PathExists = /dev/%i

%iwlan0のようになります。残念ながら、これは完全に無視されるため、このセクションの適切な使用法を理解できない可能性があります。

私も試しました:

[Unit]
....
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

私はどこから拾ったのか(どこで忘れたか)、それもうまくいきません。

8
user128580

udevsystemdを組み合わせる必要があります。

次のように、/ etc/udev/rules.d /95-mywifi.rulesにudevの新しいルールを追加します。

 ACTION=="add", ATTRS{idVendor}=="...", ATTRS{idProduct}=="...", SYMLINK=="mywifi", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"

(ドットの代わりに、ドングルに適したベンダーコードと製品コードを使用する必要があります)。

既存のnetctl-auto @ .serviceは次のとおりです。

  # cat /lib/systemd/system/netctl-auto\@.service 
  [Unit]
  Description=Automatic wireless network connection using netctl profiles
  Documentation=man:netctl.special(7)
  BindsTo=sys-subsystem-net-devices-%i.device
  After=sys-subsystem-net-devices-%i.device
  Before=network.target
  Wants=network.target

  [Service]
  ExecStart=/usr/bin/netctl-auto start %I
  ExecStop=/usr/bin/netctl-auto stop %I
  RemainAfterExit=yes
  Type=forking

  [Install]
  WantedBy=multi-user.target

これが機能するためには、netctlプロファイルをセットアップする必要があります。その方法については、 Arch Linux Wiki を参照してください。 。

7
MariusMatutiae