Systemd: नेटवर्क पूरी तरह से कनेक्ट होने के बाद एक systemd सेवा कैसे शुरू करें?


12

पृष्ठभूमि

मैं रास्पबेरी पाई 2 पर रास्पबैन में चलने के लिए एक सरल स्क्रिप्ट लिख रहा हूं, सरलता से एक एलईडी चालू करें यह इंगित करने के लिए कि मैं अपने डेस्कटॉप कंप्यूटर से एसएसएच के साथ जुड़ने के लिए तैयार हूं।

यहां स्क्रिप्ट महत्वपूर्ण नहीं है, केवल यह उल्लेख करने के लिए कि जैसा कि मैं बारंबारता नियंत्रण का उपयोग करता हूं इसलिए स्क्रिप्ट एक अनंत लूप चला रही है, एलईडी को बार-बार चालू करने के लिए। तो यह सरल सेवा का एक उदाहरण है। हालाँकि, इस प्रश्न का कम से कम स्वीकृत उत्तर मुझे सलाह देता है कि आप बेकार के प्रकार को निर्धारित करें। तो मेरी सेवा फ़ाइल की तरह दिखता है

[Unit]
Description=Turn on LED after SSH is ready

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
Wants=network-online.target
After=network-online.target

प्रभाव

सेवा अपेक्षित रूप से चलती है। हालाँकि, मैंने देखा कि जब मैं लॉग इन प्रॉम्प्ट पर एलईडी चालू करता हूं, तो मैं अपने डेस्कटॉप कंप्यूटर में पोटीन डालना शुरू नहीं करता। इसलिए मैंने जांच की

$ systemd-analyze plot > output.svg

परिणाम दिखाता है

यहाँ छवि विवरण दर्ज करें

सवाल

ऐसा लगता है कि मेरी सेवाएं शुरू नहीं हुई हैं network-online.target, यहां क्या गलत है और मैं इसे कैसे ठीक कर सकता हूं?

जवाबों:


12

जब किसी सिस्टमड डायरेक्टिव के बारे में कोई प्रश्न होता है, तो आप man systemd.directivesयह पता लगाने के लिए उपयोग कर सकते हैं कि यह कहाँ पर प्रलेखित है। इस मामले में यह दिखाता है कि इसमें After=प्रलेखित है man systemd.unit

उस फ़ाइल में, यह दिखाता है कि After=निर्देश "[UNIT] अनुभाग विकल्प" में सूचीबद्ध है, यह दर्शाता है कि यह [Unit]फ़ाइल के अनुभाग में है।

एक ही दस्तावेज [INSTALL] अनुभाग विकल्पों का भी दस्तावेज है, और After=वहां सूचीबद्ध नहीं है।

संक्षेप में, आपका After=निर्देश इकाई फ़ाइल में गलत स्थान पर था, इसलिए जब तक आप इसे सही स्थान पर नहीं ले जाते तब तक इसका कोई प्रभाव नहीं था।


स्पष्ट होने के लिए, इस मामले में "[यूनिट]" "[सेवा]" है, क्योंकि यह एक सेवा फ़ाइल है।
फ़ाहो

सुधार के साथ एक कॉपी करने योग्य जवाब बेहतर तरीका होता!
गेरार्डजप

@GerardJP एक आदमी को एक दिन के लिए मछली खिलाना सिखाने के लिए बेहतर है। एक बार जब लोग सिस्टम डॉक्यूमेंटेशन का उपयोग करना जानते हैं, तो वे थर्ड-पार्टी डॉक्स को देखते हुए StackExchange पर समय खर्च किए बिना आधिकारिक उत्तर पा सकते हैं।
मार्क स्टोसबर्ग

11

क्या यह सेवा को संशोधित करके तय किया गया है

[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
WantedBy=network-online.target

अभी भी पूरी तरह से समझ में नहीं आया कि मैं क्या कर रहा था, लेकिन यह अब काम करता है। क्या कोई समझा सकता है?

अपडेट करें

स्वीकृत उत्तर आने से पहले यह उत्तर स्वयं ने बनाया था।


यह After=निर्देश [Unit]अनुभाग में होना चाहिए । ये बस यही है।
Bigon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.