"/Etc/init.d" और "/ lib / systemd / system" में सेवाएँ


15

मैं linux की दुनिया में पूरी तरह से नया हूं, इसलिए जो कुछ भी गलत हो सकता है उसके लिए खेद है।

मैं एक डेबियन 8.5 मशीन पर एक मोंगो डीबी चलाने की कोशिश कर रहा हूं। जब मैंने पैकेज स्थापित किया (percona.com से निर्मित), तो मैंने निम्नलिखित फाइलों पर ध्यान दिया है:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

/Etc/init.d/mongod के बारे में

मैं समझता हूं कि इसे update-rc.dबूट (जब तक यह पंजीकृत है ) बूट पर / अन्य विशेष प्रणाली राज्यों में (इस पर तकनीकी प्राप्त नहीं करना चाहते हैं, मैं बहुत सारे informations को अवशोषित कर रहा हूं और यह कम महत्वपूर्ण लगता है)।

यह मेरे लिए पूरी तरह से ठीक है। स्क्रिप्ट बहुत सारे इनिशियलाइज़ेशन को अंजाम देती है और अंत में मोंगो डेमन को लॉन्च करती है। ऐसा लगता है कि "ट्रिगर्स" के लिए शुरुआत, रोक, पुनः आरंभ, आदि और जहां तक ​​मैं समझता हूं कि मैं उन लोगों को ट्रिगर कर सकता हूं sudo service mongod <action>

/Lib/systemd/system/mongod.service के बारे में

यह फ़ाइल एक ही काम करती है (यानी मानगो चलाते हैं), लेकिन कम विन्यास के साथ, एक्सेस्टार्ट पैरामीटर में सिर्फ एक पंक्ति:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

जहां तक ​​मैं समझता हूं कि इससे ट्रिगर किया जा सकता है sudo systemctl start mongod

  • मुझे समझ में नहीं आता है कि यह बूट पर कहा जाता है या नहीं।

  • मुझे समझ में नहीं आता कि इन 'सेवा' फ़ाइलों में से दो की आवश्यकता क्यों है, और मैं एक से छुटकारा कैसे पा सकता हूं (संभवतः / in / lib / systemd, क्योंकि यह बहुत सरल है)।

  • मुझे समझ नहीं आता कि दोनों के बीच कोई संबंध है या नहीं।

  • मैंने पढ़ा है कि स्क्रिप्ट systemctlपर init.dभी काम करता है, और इस मामले में मुझे समझ नहीं आ रहा है कि दोनों में से कौन सी फाइल ट्रिगर होगी systemctl mongod start

मुझे लगता है कि कुछ अतिरेक है और मुझे दो में से एक ही रास्ता चुनना चाहिए। और मैं यह सुनिश्चित करना चाहता हूं कि यह हो

  • बूट पर बुलाया
  • कमांड द्वारा कॉल करने योग्य (जैसे serviceया systemctl)।

क्या आप मुझे अपना दिमाग साफ़ करने में मदद कर सकते हैं? कुछ टिप्पणियों की मदद से मैं शायद सवाल को फोकस और संकीर्ण कर सकता हूं।

जवाबों:


12

जब आपके पास एक init.dस्क्रिप्ट और एक .serviceही नाम के साथ एक systemd फ़ाइल होती है, तो systemd सभी कार्यों के लिए सेवा फ़ाइल का उपयोग करेगा। मेरा मानना ​​है कि serviceकमांड सिर्फ़ सिस्टमड को रीडायरेक्ट करेगा। Init.d स्क्रिप्ट को अनदेखा किया जाएगा।

का उपयोग करें systemd। यह डेबियन 8 में नया है, लेकिन यह डिफ़ॉल्ट है। Systemd सेवा फ़ाइलें कर रहे हैं चाहिए init.d स्क्रिप्ट से सरल देखने के लिए। आपने ऐसी किसी विशिष्ट सुविधा का उल्लेख नहीं किया है जिसकी आपको जरूरत है, जो कि systemd सेवा द्वारा समर्थित नहीं है।

यदि सेवा फ़ाइल शामिल नहीं थी, systemdतो खुशी से init.d स्क्रिप्ट का उपयोग करेगी। तो mongod पैकेज डेवलपर आपको बता रहा है कि उन्हें लगता है कि यह systemd परिभाषा बेहतर है :)।

के आउटपुट को देखें systemctl status mongod। यदि सेवा को बूट समय पर शुरू करने के लिए सक्षम किया जाता है, तो Loaded:लाइन "सक्षम" दिखाई देगी। अन्यथा आप उपयोग कर सकते हैं systemctl enable mongod। आप विकल्प भी शामिल कर सकते हैं --now, और यह एक ही समय में शुरू होगा।


धन्यवाद! मैं systemd का अध्ययन करने जा रहा हूं और अंततः इसका उपयोग कर रहा हूं। अभी के लिए मैं इसे निष्क्रिय करना चाहता था और अंत में मैं काम कर रहा था init.d स्क्रिप्ट को चलाने। मैं गया systemctl disable mongod:; फिर नाम बदलकर mongod.service को mongod-backup.service; तब systemctl daemon-reload। क्या आपको लगता है कि यह सही था? मैंने पढ़ा है कि आपको / lib / systemd / system / में फ़ाइलों को संशोधित नहीं करना चाहिए, लेकिन नाम बदले बिना, systemctl init.d स्क्रिप्ट को अनदेखा करता रहा।
नैटारियो

/ Lib / systemd की फ़ाइलें शंकुधारी नहीं हैं। मैं वास्तव में एक डेबियन पैकेज स्थापित करने और इसकी फ़ाइलों को संशोधित करने (और बाद में पैकेज को अपडेट करने) की सिफारिश नहीं कर सकता। इसके बजाय, आपको उस init.d स्क्रिप्ट का नाम बदलना चाहिए, जिस पर आप "काम कर रहे हैं" (संभवतः संशोधित करना?)। init.d स्क्रिप्ट्स में शंकुधारी होते हैं। यदि कोई अपडेट एक शंकुधारी को बदल देता है (जिसके लिए कोई कारण नहीं होना चाहिए), तो यह आपको पहले चेतावनी देगा। इस मामले में मैं आपसे यह सूचित करने की अपेक्षा करूँगा कि यदि मूल (init.d) स्क्रिप्ट का एक अद्यतन संस्करण कभी भी उपलब्ध हो गया हो।
sourcejedi

यह संभव है कि आपको अपनी नई सेवा पर निर्भर रहने वाली सेवाओं को जोड़ना होगा, जो उन सेवाओं पर निर्भर करता है mongod। एक मौका भी है कि आपको कुछ सख्त निर्भरताएं दूर करनी होंगी, लेकिन मैंने ऐसा नहीं सोचा होगा। प्रभावित सेवाओं को संशोधित करने का एक सुरक्षित तरीका उन्हें कॉपी करना /etc/systemd/system/और कॉपी को संशोधित करना है।
sourcejedi

सामान्य तौर पर, मुझे लगता है कि सिस्टमड के साथ चिपकना सरल है। अब आप बैश, इनिट-फ़ंक्शंस, और सिस्टमड के बैक-कॉम्पटर्स सुविधाओं का अध्ययन कर रहे हैं । चूंकि आप शुद्ध SysV init सिस्टम नहीं सीख रहे हैं, यदि आप कभी भी इस तरह की प्रणाली का उपयोग करते हैं, तो एक जोखिम है जो आपको उन विशेषताओं की अपेक्षा करेगा जो वास्तव में systemd से आते हैं।
sourcejedi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.