Systemctl init.d और सेवा के बीच अंतर


39

मैं linux में नया हूँ और एक Amazon Lightsail उदाहरण (Ubuntu 16.04 LTS) का उपयोग करके खुद को परख रहा हूँ।

मैं कई गाइडों के माध्यम से जा रहा हूं, मैं एक सेवा शुरू / बंद / फिर से शुरू / पुनः लोड / स्थिति की जांच करने के लिए विभिन्न कमांड का उपयोग करते हुए लोगों को देखता हूं। विशेष रूप से ये;

sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status

उपरोक्त सभी कमांड काम करते हैं।

  1. क्या मुझे एक कमांड को दूसरे पर पसंद करना चाहिए?
  2. यदि हाँ तो क्यों?
  3. क्या कोई अन्य आदेश हैं जिनसे मुझे अवगत होने की आवश्यकता है?

Init.d का उपयोग करते हुए Monit में समस्याएँ उत्पन्न होती हैं जब मैं स्थिति विकल्प का उपयोग करना चाहता था (स्थिति यह होगी कि सेवा ऑफ़लाइन है जब वह वास्तव में ऑनलाइन थी - Monit द्वारा पुनः आरंभ किया गया)। कोड को Monit में inid.d से बदलकर / bin / systemctl में ठीक कर दें।

ऐसा लगता है कि init.d का उपयोग करने से दूसरों को क्या हुआ, इस बारे में अधिक जानकारी मिलती है। अगर मुझे अन्य कमांड में से एक का उपयोग करना चाहिए, तो क्या यह संभव है कि उन्हें अधिक जानकारी प्रदर्शित की जाए कि क्या किया गया था?

ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$

मैं सभी को अग्रिम धन्यवाद देना चाहता हूं जिन्होंने इस प्रश्न को पढ़ने और उत्तर देने के लिए समय लिया है।


लिनक्स में अक्सर एक क्रिया करने के लिए एक और तरीका होता है। ऐसा कोई नहीं है जो बेहतर या बदतर या सही या गलत हो। व्यक्तिगत रूप से मैं सबसे कम टाइपिंग के साथ एक का उपयोग करता हूं। इनमें से कई कमांड सिम्बियन लिंक हो सकते हैं या सिस्टम संगतता को उबटन के रूप में वापस कर सकते हैं।
पैंथर

systemctlपसंदीदा सिंटैक्स है और serviceइसे पिछड़े संगतता के रूप में प्रदान किया जाता है। /etc/init.d/pure-ftpdया इसी तरह से शुरू / बंद स्क्रिप्ट सीधे बुला रहे हैं।
पैंथर

जवाबों:


57

शुरू करने के लिए, वहाँ से जाने के बीच एक पूरा इतिहास और संघर्ष SysVInitहै SystemD। हालांकि, एक उत्तर में सभी को तोड़ने की कोशिश करने के बजाय, मैं आपको इतिहास पर अधिक विवरण के लिए कुछ Google उपक्रम के साथ-साथ विषय पर एक विशेष लेख का संदर्भ दूंगा:

http://www.tecmint.com/systemd-replaces-init-in-linux/

सारांश में, यह एक धीमी और कठिन संक्रमण रहा है। कुछ विरासत सुविधाओं को बरकरार रखा गया (जैसे init.dकुछ डिग्री तक)। यदि आपके पास systemctlअपनी सेवा नियंत्रण के लिए उपयोग करने का विकल्प है तो मैं उस एक का उपयोग करने की सलाह देता हूं। यह लिनक्स के लिए सबसे आगे का भविष्य है और अंततः पुराने SysVInitतरीकों को पूरी तरह से हटा दिया गया माना जाएगा।

विशेष रूप से सूचीबद्ध प्रत्येक को कवर करने के लिए:

  1. sudo systemctl status apache2.service

यह SystemDसेवाओं को संभालने का नया तरीका है। आगे बढ़ते हुए, लिनक्स पर अनुप्रयोगों को सिस्टमड विधि का उपयोग करने के लिए डिज़ाइन किया गया है, किसी अन्य को नहीं।

  1. sudo /bin/systemctl status apache2.service

यह पिछली कमांड के समान ही है। इस मामले में एकमात्र अंतर यह है कि यह $PATHकमांड खोजने के लिए शेल के पर्यावरण चर पर निर्भर नहीं है , यह कमांड को पथ को शामिल करके स्पष्ट रूप से कमांड को सूचीबद्ध कर रहा है।

  1. sudo /etc/init.d/apache2 status

यह SysVInitएक सेवा पर कॉल करने का मूल तरीका है। Init स्क्रिप्ट को एक सेवा के लिए लिखा जाएगा और इस निर्देशिका में रखा जाएगा। जबकि यह विधि अभी भी कई लोगों द्वारा उपयोग की जाती है, serviceयह कमांड थी जिसने सेवाओं को कॉल करने के इस तरीके को बदल दिया था SysVInit। नए सिस्टम पर इसके लिए कुछ विरासत कार्यक्षमता है SystemD, लेकिन अधिकांश नए कार्यक्रमों में यह शामिल नहीं है, और सभी पुराने एप्लिकेशन इनिट स्क्रिप्ट इसके साथ काम नहीं करते हैं।

  1. sudo service apache2 status

यह SysVInitसेवाओं के लिए सिस्टम पर उपयोग किया जाने वाला प्राथमिक उपकरण था । कुछ मामलों में यह सिर्फ /etc/init.d/लिपियों से जुड़ा होता है , लेकिन अन्य मामलों में यह कहीं और संग्रहीत इनिट लिपि में चला जाता है। यह सेवा निर्भरता से निपटने में एक चिकनी संक्रमण प्रदान करने का इरादा था।


अंत में, आप यह जानना चाहते हैं कि कमांड से अधिक जानकारी कैसे प्राप्त करें, क्योंकि कुछ दूसरों की तुलना में अधिक जानकारी प्रदान करते हैं। यह लगभग हमेशा एप्लिकेशन द्वारा निर्धारित किया जाता है और उन्होंने अपनी init या सर्विस फ़ाइल को कैसे डिज़ाइन किया है। एक सामान्य नियम के रूप में, अगर यह चुपचाप पूरा होता है तो यह सफल रहा। हालांकि, एक सत्यापित करने के लिए start, stopया restart, आप उपयोग कर सकते हैं statusदेखने के लिए कि यह कैसे कर रही है उप कमान। आपने statusएक पुरानी init स्क्रिप्ट पर एक कमांड गलत होने का उल्लेख किया है । यह एक बग है जिसे एप्लिकेशन डेवलपर्स को देखना होगा। हालाँकि, चूंकि इनइट स्क्रिप्ट्स सेवाओं को संभालने की पदावनत विधि बन रही है, वे बग को तब तक अनदेखा कर सकते हैं जब तक वे पूरी तरह से इनइट स्क्रिप्ट को हटा नहीं देते। systemctl status हमेशा सही ढंग से काम करना चाहिए अन्यथा बग को एप्लिकेशन डेवलपर्स के साथ लॉग इन किया जाना चाहिए।


आपके विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद। मैं भी जवाब के लिए Googling हूँ, लेकिन यह वास्तव में मुझे उलझन में है, इसलिए मैंने इसे यहाँ पोस्ट किया। मैं यह भी देखता हूं कि sudo systemctl status apache2 काम करता है, बजाय (sudo systemctl status apache2.service) के। क्या .service भाग को पूर्वगामी बनाने में कोई हानि है?
वकास तारिक

@AqasTariq कोई समस्या नहीं! उन दोनों को काम करना चाहिए, उन systemctlनिर्देशिकाओं को खोजेगा जहां सेवा फ़ाइलों को संग्रहीत किया जाता है और अगर यह मिल जाए तो आपके लिए ".service" जोड़ दें। उदाहरण के लिए, यदि आप टैब को केवल एक बार लिखने के बाद हिट करते हैं, तो sudo systemctl status apache2इसे .serviceआपके लिए जोड़कर पूरा करना चाहिए । यदि एक से अधिक apache2 systemctl फ़ाइल है (जैसे कि .serviceऔर .targetआपको दो बार टैब हिट करना होगा ताकि यह आपको उपलब्ध विकल्पों को
दिखा सके

समझ गया। आपके उत्तर और आपके समय के लिए धन्यवाद।
वकास तारिक

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