特定のインターフェイスが起動する前に起動するのを待つようにシステムサービスユニットファイルを作成するにはどうすればよいですか?

特定のインターフェイスが起動する前に起動するのを待つようにシステムサービスユニットファイルを作成するにはどうすればよいですか?

Debian で Hostapd 用のユニットファイルを作成しようとしています。

Hostapdデーモンは、実行する前にWi-Fiインターフェイスに関連するインターフェイスを起動する必要があるようです。それ以外の場合は、SEGVが使用されます。

network-online.targetを試しましたが、まだSEGVを取得します。私の考えでは、network-online.targetがインターフェイスを確認するだけで、Wi-FiインターフェイスがHostapdが正常に動作する準備ができる前に別のインターフェイスが表示されるためです。

サービスを開始する前に特定のインターフェイスが起動するのを待つ最良の方法は何ですか?

ベストアンサー1

systemd 219から、次systemd-networkd-wait-onlineのようにsystemdのツールを直接使用できます。--interfaceパラメーターは、待機するインターフェースを指定します。たとえば、

ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE

ただし、注意事項があります。systemd-networkd設定で何もしなくてもツールを実行する必要があります。一方、同じsystemd 219で起動すると、ソケットを介してアクティブにsystemd-networkdなり、アイドル状態のときに自動的にシャットダウンできます。したがって、あなたがすべきことはソケットに引っ張るだけです。

すべてをまとめると、ユニットファイルの変更は次のようになります($IFACE目的のインターフェイスに置き換えられます)。

[Unit]
Requires=systemd-networkd.socket
After=systemd-networkd.socket
...

[Service]
ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE
ExecStart=/usr/bin/hostapd ...
...

おすすめ記事