SysV, Upstart और systemd इनिट स्क्रिप्ट सह-अस्तित्व


15

मेरे सिस्टम पर (16.04), उदाहरण के लिए फाइलें /lib/systemd/system/network-manager.serviceऔर हैं /etc/init.d/network-manager

मुझे समझ नहीं आता कि यह कैसे (और क्यों) काम करता है। मैं हमेशा नेटवर्क मैनेजर को पुनः आरंभ करता हूं sudo service network-manager restart। इस प्रणाली को किसी तरह गड़बड़ नहीं करना चाहिए? यह अभी भी काम करने लगता है।

service --status-allसभी प्रकार की सेवाओं को सूचीबद्ध क्यों करता है ? 16.04 अपस्टार्ट के बजाय सिस्टमड का उपयोग नहीं करना चाहिए?

कोई कृपया बताएं कि यह सह-अस्तित्व कैसे काम करता है।

जवाबों:


17

केवल एक init सिस्टम एक बार में सक्रिय हो सकता है। 16.04 को, यह सिस्टमड है।

कई इनिट सिस्टम के लिए फाइलों के साथ कई पैकेज शिप होते हैं, इसलिए उन्हें विभिन्न ओएस पर कई इनिट सिस्टम के साथ प्रबंधित किया जा सकता है। उबंटू पर, कभी-कभी कई इनिट सिस्टम के लिए स्क्रिप्ट स्थापित हो जाती हैं, भले ही वे सभी एक ही समय में उपयोग नहीं की जाती हों।

नए इनिट सिस्टम पुराने लोगों के साथ संगतता बनाए रखने की कोशिश करते हैं। विशेष रूप से, सिस्टमड अपस्टार्ट और SysV इनिट स्क्रिप्ट दोनों के साथ संगतता बनाए रखने की कोशिश करता है।

जिस "init.d" स्क्रिप्ट का आपने उल्लेख किया है, वह "SysV" init स्क्रिप्ट है, न कि अपस्टार्ट स्क्रिप्ट। इसके अलावा, "SysV" init स्क्रिप्ट्स केवल बूट पर शुरू की जाएंगी, यदि उन्हें "/etc/rc5.d" जैसी निर्देशिका से सहानुभूति दी जाए। आपको वह नेटवर्क मैनेजर मिल जाएगा नहीं है एक सिमलिंक वहाँ स्थापित की है।

यह समझने के लिए कि systemdपुरानी "SysV" init स्क्रिप्ट को कैसे प्रबंधित करता है, देखें कि systemd /etc/init.d scirpts का उपयोग कैसे करता है?

अब, इस सवाल का जवाब देने के लिए कि यह "सेवा नेटवर्क-प्रबंधक पुनरारंभ" के साथ नेटवर्क प्रबंधक को पुनरारंभ करने के लिए क्यों काम करता है। serviceआदेश दोनों कल का नवाब स्क्रिप्ट और SysV init स्क्रिप्ट के साथ प्रयोग किया जाता है, पूर्व पसंद करते हैं। नेटवर्क मैनेजर में 16.04 पर एक अपस्टार्ट स्क्रिप्ट भी है/etc/init/network-manager.conf

यदि आप के आउटपुट की समीक्षा करते हैं sudo strace service network-manager restart, तो आप समझ सकते हैं कि क्या हो रहा है। सबसे पहले, आउटपुट दिखाता systemctlहै जिसे कॉल किया जा रहा है, यह दर्शाता है कि कमांड को सिस्टमड पर पुनर्निर्देशित किया जा रहा है। सबसे पहले, इसके खुलने के तुरंत बाद /usr/bin/service, आप देख सकते हैं कि यह फ़ाइल में शेल स्क्रिप्ट के रूप में पढ़ना शुरू करता है:

open("/usr/sbin/service", O_RDONLY)     = 3
...
read(10, "#!/bin/sh\n\n#####################"..., 8192) = 8192

अब जब हम जानते हैं कि serviceयह एक शेल स्क्रिप्ट है, तो हम इसके सोर्स कोड की जांच कर सकते हैं। स्रोत कोड में, हम पाते हैं कि is_systemdपता लगाया और सेट किया गया है। सिस्टमड केस के लिए, आप देख सकते हैं कि कमांड को फिर से लिखा जाता है systemctl restart network-manager

तो जबकि तीन init सिस्टम में सह-अस्तित्व है और कुछ संगतता है, जटिलता की परतें हैं। आगे जो हो रहा है, उसकी जटिलता को कम करने के लिए, सिस्टम यूनिट फ़ाइलों और systemctlसेवाओं को प्रबंधित करने के लिए टूल का उपयोग करना सबसे अच्छा है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.