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.