Wie schreibe ich eine systemd Service Unit-Datei, damit sie wartet, bis eine bestimmte Schnittstelle aktiv ist, bevor ich beginne?


14

Ich versuche eine Unit-Datei für hostapd auf Debian zu schreiben.

Der Hostapd-Daemon scheint die Schnittstelle zu benötigen, damit die zugehörige Wifi-Schnittstelle aktiv ist, bevor sie ausgeführt wird, oder SEGVs.

Ich habe network-online.target ausprobiert, bekomme aber immer noch das SEGV. Ich denke, das liegt daran, dass network-online.target nur JEDE Schnittstelle sehen muss und andere Schnittstellen angezeigt werden, bevor die Wifi-Schnittstelle bereit genug ist, damit hostapd funktioniert.

Wie lässt ein Dienst am besten warten, bis eine bestimmte Schnittstelle aktiv ist, bevor er gestartet wird?

Antworten:


15

Seit systemd 219 können Sie das systemd- systemd-networkd-wait-onlineTool direkt mit einem --interfaceParameter verwenden, um die Schnittstelle anzugeben, auf die gewartet werden soll. Zum Beispiel:

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

Es gibt jedoch eine Einschränkung. Dieses Tool muss ausgeführt systemd-networkdwerden, auch wenn es in Ihrer Konfiguration nichts bewirkt. Andererseits ist beginnend mit demselben Systemd 219 die systemd-networkdBuchse aktivierbar und wird im Leerlauf automatisch beendet. Alles, was Sie brauchen, ist, die Steckdose einzuziehen.

Alles in allem sehen Änderungen an der Einheitendatei folgendermaßen aus ( $IFACEersetzt durch die gewünschte Schnittstelle):

[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
Ja, genau das will ich. Leider stecke ich mit systemd 44 in Debian 4.6.3 fest und kann es daher nicht verwenden. Irgendwelche Ideen, wie es auf dieser Plattform funktioniert? Vielen Dank!
Bigjosh

2
@ Bigjosh, Sie können immer so etwas wie perl -e 'sleep 1 until -e "/sys/class/net/myinterface"'in Ihrem ExecStartPre
Stéphane Chazelas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.