systemdサービスユニットファイルを作成して、特定のインターフェイスが起動するまで待機してから開始する方法


14

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

hostapdデーモンは、実行される前、またはSEGVの実行前に、関連付けられたWifiインターフェースのインターフェースを起動する必要があるようです。

network-online.targetを試しましたが、まだSEGVを取得しています。これは、network-online.targetが任意のインターフェイスを起動することだけを必要とし、Wifiインターフェイスがhostapdが機能する準備ができる前に他のインターフェイスが起動するためだと思います。

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

回答:


15

systemd 219以降、待機するインターフェイスを指定systemd-networkd-wait-onlineする--interfaceパラメーターを指定してsystemdのツールを直接使用できます。例えば:

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 ...
...

1
はい、これはまさに私が欲しいものです。残念ながら、systemd 44を備えたDebian 4.6.3に固執しているため、使用できません。このプラットフォームで動作させる方法についてのアイデアはありますか?ありがとう!
bigjosh

2
@ bigjosh、perl -e 'sleep 1 until -e "/sys/class/net/myinterface"'ExecStartPre
StéphaneChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.