Come scrivere un file di unità di servizio systemd in modo che aspetti fino a quando un'interfaccia specifica è attiva prima di iniziare?


14

Sto cercando di scrivere un file unitario per hostapd su Debian.

Il demone hostapd sembra aver bisogno dell'interfaccia per l'interfaccia Wi-Fi associata per essere attiva prima di essere eseguita, altrimenti è SEGV.

Ho provato network-online.target, ma ottengo ancora il SEGV. Penso che ciò sia dovuto al fatto che network-online.target ha bisogno di vedere QUALSIASI interfaccia, e altre interfacce si presentano prima che l'interfaccia Wi-Fi sia pronta per far funzionare hostapd.

Qual è il modo migliore per avere un servizio in attesa di una specifica interfaccia prima di iniziare?

Risposte:


15

Da systemd 219, è possibile utilizzare systemd-networkd-wait-onlinedirettamente lo strumento di systemd , con un --interfaceparametro per specificare l'interfaccia da attendere. Per esempio:

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

Tuttavia, c'è un avvertimento. Questo strumento deve systemd-networkdessere in esecuzione, anche se non fa nulla nella configurazione. D'altra parte, a partire dallo stesso sistema e 219, systemd-networkdè attivabile tramite socket ed esce automaticamente al minimo. Quindi tutto ciò di cui hai bisogno è quello di inserirlo nella sua presa.

Mettendo tutto insieme, le modifiche al file di unità appariranno così (con $IFACEsostituito con l'interfaccia desiderata):

[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
Sì, questo è esattamente quello che voglio. Sfortunatamente sono bloccato su Debian 4.6.3 con systemd 44, quindi non posso usarlo. Qualche idea su come farlo funzionare su questa piattaforma? Grazie!
bigjosh,

2
@bigjosh, puoi sempre fare qualcosa come perl -e 'sleep 1 until -e "/sys/class/net/myinterface"'ExecStartPre
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.