क्या लिनक्स पर सेवाओं को शुरू करने और रोकने का एक मानक तरीका है?


15

कुछ समय पहले तक सेवाओं को शुरू / बंद करने का एक सरल और प्रभावी तरीका था:

service nginx start|stop|restart

इसने इतने सालों तक पूरी तरह से काम किया, ... जब तक कि कुछ स्मार्ट-पैंट ने उन्हें सुधारने का फैसला नहीं किया और अब मैं डेबियन / उबंटू सिस्टम से सामना कर रहा हूं, जहां serviceस्क्रिप्ट कुछ भी नहीं करती है (जैसा कि मैं सामान का उपयोग करने वाला हूं systemctl start nginx.service(बहुत लंबे समय तक) कोई ऑटो-पूर्ण काम नहीं कर रहा है, ...)

मेरा प्रश्न विशेष रूप से डेबियन और उबंटू को संदर्भित करता है लेकिन यह CentOS / RedHat डिस्ट्रोस को भी कवर करने में सहायक होगा।

तो, क्या ऐसा कुछ है जो मुझे इस बर्बाद बदलाव से बचा सकता है?

यदि यह स्पष्ट नहीं था, तो मैं उन लोगों से निपटने के लिए एक सुसंगत तरीके की तलाश कर रहा हूं, एक जो डेबियन 7.x, 8.x, नवीनतम उबंटू एलटीएस और गैर-एलटीएस पर काम करेगा।

पुनश्च। इस विशिष्ट प्रश्न के दायरे से बाहर है, लेकिन यदि अतिरिक्त समाधान भी सेवाओं के लिए सक्षम और अक्षम भाग को कवर करेगा, तो अतिरिक्त कुदोस प्रदान किया जाएगा।


5
मेरे लिए systemctl के लिए टैब पूरा होने के काम करता है ... और, यह पसंद है या नहीं, systemd है अब वास्तविक मानक: रूप में अच्छी तरह इसकी आदत हो सकता है।
jasonwryan

1
अतिरिक्त: यदि सेवा कमांड बेकार हो जाती है, तो क्या मैं इसे हटा सकता हूं? क्या पैकेज प्रदान करता है?
सोरिन

3
पुराने serviceकमांड को एक रैपर के साथ बदलने के लिए कोई मतलब नहीं है जो सर्विसिक को कॉल करता है?
सोरिन

4
@ajonwryan हाँ, लेकिन आप भी बस ऐसा कर सकते हैं , और एक रैपर इसे संभाल सकता है, जिससे उपयोगकर्ताओं के लिए सिस्टमड स्मूथ का संक्रमण हो सकता है।
दिमित्री ग्रिगोरीव

2
क्या serviceवास्तव में आपके लिए कुछ नहीं है? यह मेरे LMDE (जो मूल रूप से डेबियन परीक्षण है) पर अपेक्षित रूप से काम करता है, मुझे नहीं लगा कि यह LMDE- विशिष्ट चीज थी। यह मेरे उबंटू वीएम में अपेक्षित रूप से काम करता है।
terdon

जवाबों:


6

इसके पेचीदा इतिहास पर यूनिक्स प्लेटफार्मों में कई बूट और सर्विस कंट्रोल सिस्टम हैं।

service\chkconfigआधारित प्रणाली आप पाया सरल और प्रभावी आम तौर पर कहा जाता है SysVinit शैली और मानकीकरण के कुछ प्रकार के लिए रास्ते में एक बड़ा कदम था। आप 6 रिलीज़ के माध्यम से RHEL / CentOS (EL) पर बूट की इस शैली को पाएंगे, 14 के माध्यम से फेडोरा, और 2015 तक डेबियन / उबंटू आधारित वितरण पर। यह लगभग बूट सिस्टम नहीं था हालांकि, (सरल) BSD शैली init सिस्टम के अभी भी कई प्रशंसक हैं।

SysVinit एक सही समाधान नहीं था (क्या है?) और Systemd को कई मुद्दों को दूर करने के लिए तैयार किया गया था; यह systemctlकमांड आधारित प्रणाली है जिसे अब आप अनुभव कर रहे हैं। हालांकि यह सार्वभौमिक रूप से पसंद नहीं किया जाता है (लोग नफरत, परिवर्तन, आदि से नफरत करते हैं) इसमें कोई संदेह नहीं है कि यह तेजी से वितरण के अधिकांश हिस्सों में डिफैक्टो मानक बन रहा है।

इसलिए, अपने मूल प्रश्न के उत्तर को तुरंत देखना बस है: अधिकांश लिनक्स वितरणों में सेवाओं को नियंत्रित करने
का मानक तरीका अब है ! systemctl
यह कब तक सच होगा किसी का अनुमान है; शायद तब तक जब तक कुछ साथ आता है जो बेहतर है और व्यापक रूप से अपनाया जाता है।

मुझे यकीन है कि आपके वर्तमान पसंदीदा, service/chkconfigआज्ञा देने के लिए रैपर उपलब्ध होंगे, जो कि ज्यादातर समझदार चीजें करना जारी रखते हैं, लेकिन इस विशेष सीखने की अवस्था के साथ शायद यह सबसे अच्छा है कि यह लड़ाई न करें। शायद आगे देख रहे हैं, एक समय के systemctlलिए पुराने सिस्टम के लिए रैपर भी होंगे , ताकि वे किसी दर्द से कम करंट के साथ-साथ उन्हें मैनेज कर सकें;)


और इससे पहले xinetd था, और इससे पहले inetd था
jas-

@ jas- मुझे लगता है कि inetd वास्तव में स्वयं सेवाएं हैं, मेरा मानना ​​है कि वे सभी बूट सिस्टम के भीतर मौजूद हो सकते हैं। वे एक विशेष प्रकार की सेवा हैं जिसमें वे कुछ अन्य सेवाओं को पूर्ण सेवाओं के रूप में चलाने का विकल्प प्रदान करते हैं, इसके बजाय उन्हें ऑन-डिमांड प्रदान करते हैं । मैं समझता हूं कि आप इस क्यू के संदर्भ में कहां से आ रहे हैं, हालांकि, सेवाओं को शुरू करने का सिर्फ एक और तरीका है।
दानसुत

सभी वितरणों में; gentoo, centos, redhat, debian, ubuntu इत्यादि, xinetd और पहले के inetd में विभिन्न सेवाओं के लिए कॉन्फ़िगरेशन को शुरू करने, रोकने और पुनः लोड करने के लिए छोटी शेल स्क्रिप्ट शामिल थी, लेकिन हाँ आप सही हैं कि वे वास्तव में systemd की तरह ही एक सेवा हैं।
जस-

उबंटू ने 6.10 के बाद से और फेडोरा का उपयोग 9 के बाद से (जब तक कि उन्हें सिस्टमड द्वारा बदल दिया गया) upstart.ubuntu.com ने किया , और डेबियन को कुछ वर्षों के लिए सिसविनीत से दूर करना संभव हो गया ...
जेम्स टॉकीन ने

5

नहीं [यह] पुराने serviceआदेश को एक आवरण के साथ बदलने के लिए समझ में आता है जो कॉल करता है servicectl[sic] इसके बजाय?

हां, लेकिन […] एक रैपर इसे संभाल सकता है, जिससे उपयोगकर्ताओं के लिए सिस्टमड स्मूथ का संक्रमण हो सकता है।

... जो है, जैसा कि दूसरों ने टिप्पणियों में कहा है, लंबे समय से क्या किया गया है

/usr/sbin/serviceडेबियन 8 पर आदेश sysvinit-utils संकुल का हिस्सा है। यह 2009 के बाद से वहाँ है। यह मूल सिसविनीट स्रोत पैकेज के लिए एक डेबियन-विशिष्ट रेडहैट-उत्पत्ति है, और जैसा कि स्क्रिप्ट को पढ़ने से देखा जा सकता है यह सिस्टमड रनिंग और अपस्टार्ट जॉब्स की उपस्थिति, खेती की आज्ञाओं दोनों को पहचानता है ( systemctlऔर initctlअपने उपनामों के माध्यम से) क्रमशः। यह उसने 2013 से किया है।

service name actionगैर-लिनक्स ऑपरेटिंग सिस्टम पर भी काफी व्यापक रूप से उपलब्ध है। यह अधिकांश बीएसडी पर भी काम करेगा, क्योंकि उनके पास भी अपनी serviceकमांड है। serviceअनुवाद करने वाले nosh पैकेज में एक शिम कमांड भी है । परंतु …system-control action name

  • ... इस आम उपसमुच्चय से परे हो जाओ, और चारों ओर कम संगतता है।
  • … OpenBSD का कोई serviceआदेश नहीं है ।
  • ... बीएसडी serviceकमांडों को लंबे समय से चली आ रही समस्याओं के बारे में अच्छी तरह से ज्ञात है कि सिस्टम प्रशासक युद्ध के बारे में दशकों से बता रहे हैं।

सेवाओं को सक्षम और अक्षम करना एक समान स्थिति है। हालाँकि SuSE chkconfigकार्यक्रम (डेबियन और उबंटू के लिए उपलब्ध है) फेडोरा एक के लिए बहुत अलग है (वे पूरी तरह से अलग-अलग प्रोग्रामिंग भाषाओं में लिखे जा रहे हैं, यहां तक ​​कि - एक संकलित, एक व्याख्या की गई), एक सामान्य न्यूनतम वाक्यविन्यास है, जिसमें कार्रवाई हो रही है या । परंतु …chkconfig name actiononoff

  • ... फिर, इस सामान्य सबसेट से परे कम संगतता है।
  • ... chkconfigबीएसडी पर कोई नहीं है , क्योंकि इसके लिए पारंपरिक उपकरण sysrcया तो हाल ही में ओपनबीएसडी rcctl enableऔर हैं rcctl disable। नोश पैकेज में chkconfigऔर rcctlशिम हैं जो अनुवाद करते हैं और ।system-control enable namesystem-control disable name
  • ... केवल फेडोरा chkconfigsystemd के बारे में जानता है और के लिए एक परत के रूप में कार्य systemctl enableऔर systemctl disable। SuSE chkconfigको सिस्टमड का कोई ज्ञान नहीं है।

आगे की पढाई


2

लिनक्स पर सेवाओं को शुरू करने और रोकने का कोई मानक तरीका नहीं है।

क्या ऐसा कुछ है जो मुझे इस बर्बाद परिवर्तनों से बचा सकता है?

कॉन्फ़िगरेशन प्रबंधन / ऑर्केस्ट्रेशन टूल का प्रयास करें: Ansible , शेफ , साल्टस्टैक , कठपुतली या जो भी।

आप शुरू और सक्षम के साथ एक सेवा को सक्षम कर सकते हैं:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

लाइनेबल मॉड्यूल में LinuxService वर्ग पर एक नज़र डालें service:

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


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



1

आपकी समस्या यह है कि डेबियन / उबंटू systemdपुराने के प्रतिस्थापन के रूप में नए में बदल गया है sysvinit। पूछें कि कौन सा बेहतर है और आप एक लौ युद्ध शुरू करेंगे, लेकिन आप पुराने रास्ते पर वापस जा सकते हैं sysvinit, अगर आप वापस जाना चाहते हैं तो यह जांचें ।

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