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