Bir systemd servis birimi dosyası nasıl yazılır, böylece başlamadan önce belirli bir arayüzün çıkmasını bekler?


14

Debian üzerinde hostapd için bir birim dosyası yazmaya çalışıyorum.

Hostapd arka plan programı, çalıştırılmadan önce ilişkili Wifi arayüzünün çalışması için arayüze ihtiyaç duyuyor gibi görünüyor ya da SEGV's.

Ben network-online.target denedim, ama yine de SEGV olsun. Bunun ağ-online.target sadece HERHANGİ bir arabirimi görmek gerekiyor ve Wifi arabirimi hostapd çalışmak için hazır olmadan önce diğer arabirimler geliyor çünkü düşünüyorum.

Hizmete başlamadan önce belirli bir arabirimin çalışmasını beklemenin en iyi yolu nedir?

Yanıtlar:


15

Systemd 219'dan bu yana, beklenecek arabirimi belirtmek için systemd-networkd-wait-onlinebir --interfaceparametreyle doğrudan systemd'nin aracını kullanabilirsiniz . Örneğin:

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

Ancak, bir uyarı var. systemd-networkdYapılandırmanızda hiçbir şey yapmasa bile bu aracın çalışması gerekir . Öte yandan, aynı sistem 219 ile başlayarak systemd-networkd, soket ile etkinleştirilebilir ve boşta otomatik olarak çıkar. Yani ihtiyacınız olan her şey yuvasına çekmek.

Hepsini bir araya getirirsek, birim dosyasında yapılan değişiklikler şu şekilde görünecektir ( $IFACEistediğiniz arayüzle değiştirilir):

[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
Evet, tam olarak istediğim bu. Ne yazık ki Debian 4.6.3 üzerinde systemd 44 ile sıkışmış, bu yüzden kullanamazsınız. Bu platformda nasıl çalışacağına dair herhangi bir fikriniz var mı? Teşekkürler!
bigjosh

2
@bigjosh, ExecStartPre'nizde her zaman böyle bir şey perl -e 'sleep 1 until -e "/sys/class/net/myinterface"'yapabilirsiniz
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.