लिनक्स सर्वर को नीचे लाने के लिए इन कमांडों के बीच क्या अंतर है?


65

पढ़ना "हॉल्ट और शटडाउन कमांड के बीच अंतर क्या है?" , मैं आमतौर पर एक विचार है कि कमांड शटडाउन क्या करता है, के साथ या बिना -h / -r विकल्प।

"हाल्ट" कमांड सिस्टम के रन-लेवल 0 के लिए सिस्टम की पावर ऑफ करता है।

"शटडाउन" कमांड रन-लेवल 1 के बिना -h या -r कमांड के लिए सिस्टम की पावर ऑफ करता है।

कमांड "पॉवरऑफ" के बारे में क्या यह रन-लेवल 0 या 1 में जाता है? क्या इन तीन आज्ञाओं के बीच यही एकमात्र मुख्य अंतर है?


संबंधित askubuntu.com/q/578144/216503
heemayl

यह कुछ चीजें हैं जो उदाहरण के लिए Solaris और FreeBSD के लिए काफी भिन्न हैं। (वहाँ वे आम तौर पर (लगभग) तुरंत सर्वर को बंद / बंद करते हैं, बिना रनवेले को पहले सामान को बंद करने के लिए)
गर्ट वैन डेन बर्ग

जवाबों:


120

और अब, systemd जवाब।

आप अपने प्रश्न के टैग के अनुसार, Red Hat Enterprise Linux का उपयोग कर रहे हैं। संस्करण 7 के बाद से, जिसने सिस्टमड का उपयोग किया है। सिस्टमड की दुनिया के लिए कोई भी अन्य उत्तर सही नहीं है; और न ही आपके प्रश्न में कुछ मान्यताएँ हैं।

  • रनलेवल्स के बारे में भूल जाओ ; वे मौजूद हैं, लेकिन केवल संगतता के रूप में। सिस्टमड दस्तावेज़ीकरण बताता है कि अवधारणा "अप्रचलित" है। यदि आप एक सिस्टमड ऑपरेटिंग सिस्टम पर इस सामान को सीखना शुरू कर रहे हैं, तो वहां से शुरू न करें।
  • उस मैनुअल पेज के बारे में भूल जाते हैं जिसे मार्सेलम ने उद्धृत किया था; यह बिल्कुल सही टूलसेट से नहीं है, और यह किसी अन्य टूलसेट के कमांड का वर्णन है, जो सिस्टमड के लिए गलत है। यह haltवैन स्मरनबर्ग "सिस्टम 5" initउपयोगिताओं से कमांड के लिए एक है ।
  • उन कथनों को अनदेखा करें जो /sbin/haltएक प्रतीकात्मक कड़ी हैं /sbin/reboot; यह सिस्टमड के साथ सच नहीं है। कोई अलग rebootकार्यक्रम नहीं है ।
  • उन बयानों को अनदेखा करें जो कमांड-लाइन तर्कों के साथ एक कार्यक्रम शुरू करते हैं haltया ; वे भी systemd के साथ सच नहीं हैं। कोई अलग कार्यक्रम नहीं है ।rebootshutdownshutdown

प्रत्येक सिस्टम प्रबंधन टूलसेट में इन उपयोगिताओं का अपना संस्करण है। systemd, upstart, nosh , van Smoorenburg init, और BSD initसभी अपने स्वयं haltके poweroff, और इसके आगे हैं। प्रत्येक पर उनके यांत्रिकी थोड़ा अलग हैं। तो उनके मैनुअल पेज हैं।

Systemd टूलसेट में halt, poweroff,reboot , telinit, और shutdownकर रहे हैं सभी सांकेतिक लिंक करने के लिए /bin/systemctl। वे सभी पश्चगामी संगतता शिम हैं, जो कि सिस्टमड के प्राथमिक कमांड-लाइन इंटरफ़ेस को लागू करने के लिए बस आशुलिपि हैं systemctl:। वे सभी एक ही कार्यक्रम के लिए (और वास्तव में) नक्शे पर हैं । (सम्मेलन द्वारा, शेल यह बताता है कि किस नाम से इसे लागू किया गया है।)

लक्ष्य, रनलेवल नहीं

उन आदेशों में से अधिकांश एक विशेष लक्ष्यsystemctl को अलग करने के लिए सिस्टमड, का उपयोग करने के लिए शॉर्टहैंड हैं । अलगाव को मैनुअल पेज (qv) में समझाया गया है , लेकिन इस उत्तर के प्रयोजनों के लिए, लक्ष्य शुरू करने और किसी अन्य को रोकने के बारे में सोचा जा सकता है। सिस्टमड में प्रयुक्त मानक लक्ष्य (8) मैनुअल पेज पर सूचीबद्ध हैं ।systemctlsystemd.special

bootupसिस्टम टूलसेट में 7 (7) मैनुअल पेज पर आरेख , विशेष रूप से अंतिम एक, यह दर्शाता है कि यहां तीन "अंतिम" लक्ष्य हैं जो प्रासंगिक हैं:

  • halt.target- एक बार जब सिस्टम इस लक्ष्य को पूरी तरह से अलग करने की स्थिति में पहुंच गया है, तो इसे reboot(RB_HALT_SYSTEM)सिस्टम कॉल कहा जाएगा । कर्नेल ने एक ROM मॉनिटर प्रोग्राम में प्रवेश करने का प्रयास किया होगा, या बस CPU को रोक दिया था (ऐसा करने के लिए जो भी तंत्र उपयुक्त हो) का उपयोग करना।
  • reboot.target- एक बार जब सिस्टम इस लक्ष्य को पूरी तरह से अलग करने की स्थिति में पहुंच गया है, तो इसे reboot(RB_AUTOBOOT)सिस्टम कॉल (या मैजिक कमांड लाइन के बराबर) कहा जाएगा। कर्नेल ने रीबूट को ट्रिगर करने का प्रयास किया होगा।
  • poweroff.target- एक बार जब सिस्टम इस लक्ष्य को पूरी तरह से अलग करने की स्थिति में पहुंच गया है, तो इसे reboot(RB_POWER_OFF)सिस्टम कॉल कहा जाएगा । कर्नेल ने यदि संभव हो तो सिस्टम से बिजली निकालने का प्रयास किया होगा।

ये ऐसी चीजें हैं जिनके बारे में आपको अंतिम प्रणाली के रूप में सोचना चाहिए, न कि स्तरों को चलाना। आरेख से ध्यान दें कि सिस्टमड लक्ष्य प्रणाली खुद ऐसी चीजों को एनकोड करती है, जो अन्य प्रणालियों में निहित हैं, स्पष्ट के बजाय निहित: जैसे कि यह धारणा कि इनमें से प्रत्येक अंतिम लक्ष्य लक्ष्य को शामिल करता है shutdown.target, ताकि कोई ऐसी सेवाओं का वर्णन करे जो डाउनडाउन से पहले बंद कर दिया जाना चाहिए उन्हें होने के साथ संघर्षshutdown.target लक्ष्य।

systemctlsystemd-logindजब कॉल करने वाला उपयोगकर्ता सुपरयुसर नहीं है, तो अनुरोध भेजने का प्रयास करता है । यह विलंबित शटडाउन से भी अधिक गुजरता है systemd-shutdownd। और कुछ आशुलिपि wallसूचनाएं ट्रिगर करती हैं । एक तरफ वे जटिलताएँ, जो इस उत्तर को कई गुना लंबा बना देती हैं, यह मानते हुए कि आप वर्तमान में सुपरसियर हैं और एक निर्धारित कार्रवाई का अनुरोध नहीं कर रहे हैं:

  • systemctl isolate halt.target आशुलिपि है:
    • shutdown -H now
    • systemctl halt
    • सादा अनगढ़ halt
  • systemctl isolate reboot.target आशुलिपि है:
    • shutdown -r now
    • telinit 6
    • systemctl reboot
    • सादा अनगढ़ reboot
  • systemctl isolate poweroff.target आशुलिपि है:
    • shutdown -P now
    • telinit 0
    • shutdown now
    • systemctl poweroff
    • सादा अनगढ़ poweroff
  • systemctl isolate rescue.target आशुलिपि है:
    • telinit 1
    • systemctl rescue
  • systemctl isolate multi-user.target आशुलिपि है:
    • telinit 2
    • telinit 3
    • telinit 4
  • systemctl isolate graphical.target आशुलिपि है:
    • telinit 5

विभिन्न भिन्न कमांड-लाइन सिंटैक्स को पार्स करने के बाद, ये सभी अंततः systemctlप्रोग्राम के अंदर समान कोड पथ में समाप्त हो जाते हैं ।

टिप्पणियाँ:

  • विकल्प-कम का पारंपरिक व्यवहार एकल-उपयोगकर्ता मोडshutdown now पर स्विच करने के लिए किया गया है । यह सिस्टमड के साथ ऐसा नहीं है। rescue.target- एकल-उपयोगकर्ता मोड को सिस्टम मोड में रेस्क्यू मोड का नाम दिया जा रहा है - shutdownकमांड के साथ उपलब्ध नहीं है ।
  • telinit वास्तव में पूरी तरह से फाइल सिस्टम में उन सभी और प्रतीकात्मक लिंक को अनदेखा करता है, जिनका मैनुअल पेज वर्णन करते हैं। उपरोक्त उल्लिखित मैपिंग को एक तालिका में, प्रोग्राम में हार्डवेर किया गया है ।runlevelN.targetdefault.targetsystemctl
  • systemd में वर्तमान रन स्तर की कोई धारणा नहीं है । यदि आप रन-लेवल N में हैं, तो इन कमांड्स का संचालन सशर्त नहीं है ।
  • --forceकरने के लिए विकल्प halt, rebootऔर poweroffआदेशों को यह कहते हुए एक ही है --force --forceकरने के लिए systemctl halt, systemctl rebootऔर systemctl poweroffआदेशों। यह सीधे systemctlकॉल करने का प्रयास करता है reboot()। आम तौर पर यह सिर्फ लक्ष्यों को अलग करने की कोशिश करता है।
  • telinitके रूप में ही नहीं है init। वे सिस्टम वर्ल्ड में अलग-अलग प्रोग्राम हैं, बाद वाले systemdप्रोग्राम के लिए दूसरा नाम है, प्रोग्राम के लिए नहीं systemctl। यह systemdकार्यक्रम किसी भी वैन स्मरनबर्ग संगतता के साथ अनिवार्य रूप से संकलित नहीं है, और कुछ सिस्टमड ऑपरेटिंग सिस्टमों पर शिकायत करता है कि यदि कोई प्रयास करता है तो गलत तरीके से लागू किया जाएगा ।init N

आगे की पढाई


1
यह सबसे आधुनिक लिनक्स सिस्टम के लिए बहुत ही सामान्य है इसलिए उदाहरण के लिए wiert.me/2012/12/30/… इन सभी वर्षों की सोच के बाद, मैं अंत में समझता हूं कि क्या हो रहा है और क्यों।
जीरेन विर्ट प्लुइमरस

systemctl rebootके बराबर होना चाहिए systemctl start reboot.target --job-mode=replace-irreversible। किसी भी अन्य नौकरी मोड का उपयोग करना कम मजबूत है। unix.stackexchange.com/questions/381739/…
sourcejedi

1
मैंने आपका पूरा उत्तर पढ़ा, और जो कुछ मैं कर सकता था, उसे आत्मसात कर लिया। एक प्रश्न शेष है, वही जिसके लिए मैं यहां आया था, क्या systemctl rebootरिबूट करने का "सुरक्षित" तरीका है, जैसे init 6कि वह तरीका है जो हम अन्यथा रिबूट करेंगे?
ब्रायन थॉमस

25
  • haltसभी सीपीयू कार्यों को रोकने के लिए हार्डवेयर को निर्देश देता है , लेकिन इसे एक संचालित स्थिति में छोड़ देता है। इसका मतलब आमतौर पर किसी को पावर बटन को बाद में दबाकर मशीन को रिबूट या बंद करना पड़ता है। इसे प्राप्त करने का विशिष्ट तरीका आर्किटेक्चर विशिष्ट है, लेकिन उदाहरण के लिए x86 इंस्ट्रक्शन सेट उन HLTनिर्देशों को प्रदान करता है जो केंद्रीय प्रसंस्करण इकाई (सीपीयू) को तब तक रोकते हैं जब तक कि अगले बाहरी व्यवधान को निकाल नहीं दिया जाता है।

  • poweroff, जैसे halt, सीपीयू को रोकता है, लेकिन एक एसीपीआई हार्डवेयर सिग्नल भी भेजता है जो सिस्टम को पूर्ण और तत्काल शटडाउन के साथ शुरू करने का निर्देश देगा। यह सामान्य डेस्कटॉप कंप्यूटर पर पावर बटन दबाने के बराबर है।

दोनों haltऔर poweroffआम तौर पर करने के लिए सांकेतिक लिंक कर रहे हैं rebootनिष्पादन, जो आमतौर पर लागू करेगा shutdownउचित तर्क (साथ उपकरण -h, -Pया r) अगर पर निर्भर करता है halt, poweroffया rebootउपकरण को लागू करने के लिए इस्तेमाल किया गया था। हालाँकि, जब --forceविकल्प को पास किया जाता है reboot, या जब रनले 0 या 6 में होता है, rebootतो reboot()सिस्टम कॉल को एक उपयुक्त कमांड कोड के साथ लागू करेगा ।


थॉमस, समझाने के लिए बहुत बहुत धन्यवाद। मुझे यह जानने में दिलचस्पी है कि #init 0 करने के बारे में क्या बहुत अंतर नहीं है?
विन।

@ Win.T जैसे कि रनवेलेवल 0 पर जाकर स्विच करना /sbin/init 0या /sbin/telinit 0सिस्टम को बंद करने के समान होना चाहिए, हालांकि उठाए गए विशिष्ट चरण सिस्टम-इन init , upstart या systemd जैसे प्रश्न में init सिस्टम पर निर्भर करेंगे । यदि आप RHEL चला रहे हैं, तो आप systemd का उपयोग कर रहे हैं।
थॉमस निमन

4
स्वयं पर ध्यान दें: हर बार जब कोई व्यक्ति आर्काइव Win32 एपीआई कॉल के बारे में शिकायत करता है, तो उन्हें रिबूट (2) दिखाएं।
इबिबिस

@ मिनीबिस लेकिन रिबूट जानबूझकर आर्कन है। इसके लिए जादू के झंडे की आवश्यकता होती है ताकि दुर्घटना से ऐसा करना बहुत मुश्किल हो।
केविन कॉक्स

4
@ केविनकोक्स जादू के झंडे की आवश्यकता के लिए तर्क है। यह मैजिक 2 के लिए 4 अलग-अलग मानों को स्वीकार करने का तर्क नहीं है, न ही एक पीआईडी ​​नामस्थान के अंदर अलग व्यवहार करने के लिए, और न ही कई फ़ंक्शन से संबंधित बमुश्किल संचालन (जैसे रिबूट-ऑन-Ctrl-Alt-Delete व्यवहार सेट करने) के लिए।
इमीबिस

1

halt, poweroffऔर shutdown -hपूरी तरह से बराबर हैं। वास्तव में, पड़ाव और पॉवरऑफ कॉल करने के अलावा कुछ नहीं करते हैं shutdown -h। पड़ाव / पावरऑफ मैनपेज से:

यदि सिस्टम को रनवेवल 0 या 6 में नहीं होने पर रिबूट या रिबूट कहा जाता है, तो दूसरे शब्दों में, जब यह सामान्य रूप से चल रहा होता है, तो इसके बजाय (-h या -r ध्वज के साथ) शटडाउन किया जाएगा। अधिक जानकारी के लिए शटडाउन (8) मैनपेज देखें।

शटडाउन फिर रनलेवल 0 पर स्विच करके सिस्टम को बंद करने के लिए आगे बढ़ता है।

हॉल्ट और पॉवरऑफ़ (और रिबूट) एक दोहरी भूमिका निभाते हैं; जब शट डाउन करने की प्रक्रिया में निष्पादित किया जाता है (यानी, रनलेवल 0 या 6 में), तो वे निम्न स्तर के संचालन को शारीरिक रूप से बंद करने, बिजली बंद करने या मशीन को रिबूट करने के लिए आवश्यक कार्य करते हैं, जैसा कि एक अन्य उत्तर में वर्णित है।


2
आप किस संस्करण का उपयोग कर रहे हैं? आम तौर पर पड़ाव और पॉवरऑफ़ के बीच अंतर होता है (हालांकि थोड़ी देर के लिए यह कई वितरणों में नहीं हुआ करता था, लेकिन यह एक बग था)।
ब्रूनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.