"Systemctl मास्क" और "systemctl अक्षम" के बीच अंतर क्या है?


35

जब मैं बूट कर रहा हूं तो प्लायमाउथ सेवाओं को अक्षम करके अपने Ubuntu GNOME 16.04 के बूट समय में सुधार करना चाहता हूं। मैंने विभिन्न वेबसाइटों पर इसे करने के दो उत्तर पाए हैं:

# systemctl disable plymouth-quit-wait.service 
# systemctl mask plymouth-quit-wait.service 

जब तक मैं नहीं जानता कि वे क्या करते हैं, मैं उपरोक्त में से किसी को भी निष्पादित नहीं कर सकता।


जवाबों:


52

यदि कोई सेवा है enabled, तो कहीं पर सिमिलिंक है

/etc/systemd/system

एक इकाई फ़ाइल के लिए, सबसे अधिक बार कहीं में

/lib/systemd/system

सहायक रूप से, जब आप enableएक सेवा करते हैं, तो निर्मित लिंक और लक्ष्य के पूर्ण पथ को stdout में मुद्रित किया जाएगा।

सेवा को अक्षम करने से सिमलिंक नष्ट हो जाता है, इसलिए यूनिट फ़ाइल स्वयं प्रभावित नहीं होती है, लेकिन सिस्टम बूट होने पर सेवा अगले बूट पर लोड नहीं होती है /etc/systemd/system

हालाँकि, एक अक्षम सेवा को लोड किया जा सकता है, और यदि कोई सेवा उस पर निर्भर करती है तो उसे शुरू किया जाएगा ; enableऔर disableकेवल इकाइयों के लिए ऑटो-स्टार्ट व्यवहार को कॉन्फ़िगर करते हैं, और राज्य को आसानी से ओवरराइड किया जाता है।

एक नकाबपोश सेवा वह है जिसकी इकाई फ़ाइल एक सिमलिंक है /dev/null। यह सेवा को लोड करने के लिए "असंभव" बनाता है, भले ही इसके लिए किसी अन्य, सक्षम सेवा की आवश्यकता हो।

जब आप maskसेवा करते हैं, तो मूल इकाई फ़ाइल को कहीं और से अछूता छोड़कर , एक सिमलिंक बनाया जाता /etc/systemd/systemहै /dev/null। जब आप unmaskकिसी सेवा को हटाते हैं तो सिमलिंक हटा दिया जाता है।

हालाँकि, मैंने देखा है कि ये आदेश हमेशा सम्मानित नहीं होते हैं।

जब मैं अधिकांश सेवाओं को विफल करने की कोशिश करता हूं, तो यह विफल हो जाता है:

$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument

बेशक, मैंने पहले सेवा बंद कर दी। @ अनवर का कहना है कि मास्किंग केवल गैर-महत्वपूर्ण सेवाओं के लिए ही संभव है।

एक नकाबपोश सेवा को अनमास्क करना, जब तक कि मैं इसे स्वयं नकाबपोश नहीं करता, तब तक वह भी (चुपचाप) विफल रहता है। मेरा मानना है कि ऐसा इसलिए है क्योंकि /dev/nullइस समय इस सेवा के लिए कोई यूनिट फ़ाइल नहीं है, सिवाय सिम्बल के , इस समय में /lib/systemd/system:

$ file $(locate fuse.service)
/lib/systemd/system/fuse.service: symbolic link to /dev/null
$ sudo systemctl unmask fuse.service
$ systemctl status fuse
● fuse.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)

मुझे यह समस्या नहीं है

वास्तव में नकाबपोश सेवा X11-आम बेनकाब करने के लिए, मैं करने के लिए सिमलिंक को नष्ट करने के लिए किया था /dev/nullऔर sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload। अब जब मैं इसे क्वेरी करता systemctl status x11-commonहूं तो मुझे लगता है कि सेवा में एक अच्छा हरा सर्कल है और लोड और सक्रिय (बाहर) है, हालांकि इसकी कोई इकाई फ़ाइल नहीं है।

आगे के संदर्भ के लिए कैसे सिस्टमक्टेल का उपयोग करें यह कुछ उपयोग हो सकता है।


1
हम्म, मैं मिलता हूं systemctl status x11-common ● x11-common.service Loaded: masked (/dev/null; bad) Active: inactive (dead)। कि बुरा है? लेकिन मैं डेबियन पर हूं, उबंटू में नहीं। वैसे भी, अच्छी व्याख्या। धन्यवाद।
फहीम मीठा

@FaheemMitha मुझे यकीन नहीं है कि सेवा की आवश्यकता है - मेरा सिस्टम इसके बिना काम करना चाहता है। हालांकि डेबियन के साथ कोई अनुभव नहीं, क्षमा करें!
ज़ाना

17

यह बहुत सरल है।

  • systemctl start, systemctl stop: शुरू होता है प्रश्न में (बंद हो जाता है) इकाई तुरंत ;
  • systemctl enable, systemctl disable: चिह्न (unmarks) के लिए यूनिट बूट समय पर स्वत: प्रारंभ (एक यूनिट-विशिष्ट तरीके से, अपने में वर्णित [Install]खंड);
  • systemctl mask, systemctl unmask: अनुमति नहीं देता है (अनुमति देता है) प्रश्न में इकाई शुरू करने के लिए सभी और किसी भी प्रयास को (या तो स्वयं या किसी अन्य इकाई की एक निर्भरता, डिफ़ॉल्ट बूट लक्ष्य की निर्भरता भी शामिल है)। ध्यान दें कि सिस्टमड में ऑटोस्टार्ट के लिए अंकन डिफ़ॉल्ट बूट लक्ष्य से इकाई में एक कृत्रिम निर्भरता जोड़कर कार्यान्वित किया जाता है, इसलिए "मास्क" ऑटोटार्टिंग को भी रोक देता है।

Ref .: systemctl (1)

अधिक: लेन्नर्ट पोइटरिंग (2011-03-02)। "ऑफ द थ्री लेवल ऑफ ऑफ"व्यवस्थापकों के लिए systemd । 0pointer.de।



6

संक्षेप में,

  • disableबूट के दौरान यूनिट को अक्षम बनाता है। लेकिन उस यूनिट को बूट के बाद कभी भी शुरू किया जा सकता है।

  • maskयूनिट को पूरी तरह से निष्क्रिय कर देता है। इसे बिना काम किए शुरू नहीं किया जा सकता है। इसका अर्थ है कि बूट के दौरान यह स्वचालित रूप से विफल हो जाएगा।


मैं उत्सुक हूँ - कर maskऔर unmaskआप के लिए काम करता है? (अगर आप परीक्षण नहीं करना चाहते हैं तो मैं पूरी तरह से समझ सकता हूं!)
Zanna

1
@Zanna हाँ। वह काम करता है। मैंने पहले अभी-अभी परीक्षण किया है। postgresql@9.5-main.serviceसेवा के साथ ।
अनवर

हम्म मैं काम करना चाहता हूँ क्यों यह मेरे लिए काम नहीं करता है। मुझे पता है कि मैं केवल एक ही नहीं हूं
Zanna

हो सकता है कि यह गैर-महत्वपूर्ण सेवाओं के लिए काम करे। यह अभी भी नया है मुझे लगता है। btw, आपका जवाब अधिक जानकारीपूर्ण था। यह सहायक था
अनवर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.