सिस्टमड सर्विस यूनिट फ़ाइल कैसे लिखें ताकि यह शुरू होने से पहले एक विशिष्ट इंटरफ़ेस होने तक इंतजार करे?


14

मैं डेबियन पर होस्टपैड के लिए एक इकाई फ़ाइल लिखने की कोशिश कर रहा हूं।

Hostapd डेमॉन को लगता है कि संबंधित Wifi इंटरफ़ेस को चलाने से पहले उसे चलाने की आवश्यकता है अन्यथा वह SEGV है।

मैंने network-online.target की कोशिश की है, लेकिन अभी भी SEGV मिलता है। मुझे लगता है कि यह इसलिए है क्योंकि network-online.target को केवल किसी भी इंटरफ़ेस को देखने की आवश्यकता होती है, और Wifi इंटरफ़ेस काम करने के लिए पर्याप्त रूप से तैयार होने से पहले अन्य इंटरफेस आता है।

शुरू करने से पहले एक विशिष्ट इंटरफ़ेस के लिए सेवा की प्रतीक्षा करने का सबसे अच्छा तरीका क्या है?

जवाबों:


15

सिस्टमड 219 के बाद से, आप इंटरफ़ेस को प्रतीक्षा करने के लिए निर्दिष्ट करने के लिए systemd-networkd-wait-onlineएक --interfaceपैरामीटर के साथ सीधे सिस्टमड के टूल का उपयोग कर सकते हैं । उदाहरण के लिए:

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

हालांकि, एक चेतावनी है। इस उपकरण systemd-networkdको चलाने की आवश्यकता है, भले ही यह आपके कॉन्फ़िगरेशन में कुछ भी न करे। दूसरी ओर, समान सिस्टमड 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 ...
...

1
हां, यह वही है जो मैं चाहता हूं। दुर्भाग्य से मैं सिस्टमबीड 44 के साथ डेबियन 4.6.3 पर अटका हुआ हूं, इसलिए इसका उपयोग नहीं कर सकता। इस मंच पर काम करने के तरीके पर कोई विचार? धन्यवाद!
बिगजॉश

2
@ बिज्जू, आप हमेशा perl -e 'sleep 1 until -e "/sys/class/net/myinterface"'अपने ExecStartPre में कुछ कर सकते हैं
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.