सिस्टमैड टारगेट कैसे बनाएं?


17

बहुत सारे पोस्ट, Youtube वीडियो और सिस्टम डॉक्यूमेंट के मामले में "प्रलेखन" के माध्यम से बहुत खोजने के बाद भी मैं नुकसान में हूं।

लिंक ( https://wiki.archlinux.org/index.php/systemd#Create_custom_target ) आशाजनक लग रहा था, लेकिन थोड़ा अस्पष्ट (मेरे लिए) था।

सवाल

कस्टम सिस्टम टारगेट (IE: foo.target) बनाने के बारे में कैसे जाना जाएगा ताकि कोई .service इकाइयों के साथ बूट हो सके?

उदाहरण

  1. सिस्टम बूट्स default.target ("foo.target" का सिमिलर)
  2. "foo.target" केवल एक नंगे X सर्वर और GUI प्रोग्राम को शुरू करता है, "gvim" कहता है।

कारण

मैं बस एक एक्स प्रोग्राम शुरू करने के लिए एक कस्टम लक्ष्य बनाना चाहता हूं। मुझे उन सभी सेवाओं को बाहर करना अच्छा लगेगा जिनकी मुझे आवश्यकता नहीं है।

अग्रिम में धन्यवाद!

जवाबों:


17

के माध्यम से पढ़ना man 5 systemd.unitऔर man 5 systemd.targetहमें बताता है कि यूनिट फ़ाइलों का उपयोग लक्ष्य को परिभाषित करने के साथ-साथ बाकी सब सिस्टमड के लिए किया जाता है। कोई लक्ष्य बनाने के लिए विशेष रूप से कोई दस्तावेज नहीं है , इसलिए यह निर्धारित करना कठिन है कि इसे कैसे किया जाना चाहिए, लेकिन यह सेवा बनाने से बहुत अलग नहीं है।

जब आप अपने लक्ष्य बनाते हैं, आप करने की आवश्यकता होगी सिमलिंक को target.wantssystemd सेवाओं निर्देशिका से निर्देशिका। फिर आप अपना टारगेट सेट / बूट कर सकते हैं। यहां बताया गया है कि यह आपके उदाहरण को कैसे देख सकता है।

/etc/systemd/system/foo.target

यह लक्ष्य की इकाई फ़ाइल है। यदि graphical.target को एक उदाहरण के रूप में लिया जाता है, तो हम आधार के रूप में इसका उपयोग करके अपना लक्ष्य बना सकते हैं।

[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes

सिस्टमड मैनपज से लिए गए विकल्पों की व्याख्या करने के लिए;

  • Description- लक्ष्य का वर्णन करता है। आपको समझना चाहिए
  • Requires- लक्ष्य की कठिन निर्भरता। अपनी सेवा शुरू करने से पहले आपको मूल प्रणाली को शुरू करने देना चाहिए
  • Wants- नरम निर्भरता। लक्ष्य को शुरू करने के लिए इनकी आवश्यकता नहीं है
  • Conflicts - यदि एक इकाई में किसी अन्य इकाई पर एक विरोधाभासी सेटिंग है, तो पूर्व को शुरू करना बाद के और इसके विपरीत बंद हो जाएगा।
  • After - इन सेवाओं के बाद जूते
  • AllowIsolate- वास्तव में आप और आपके पर्यावरण के लिए। विवरण मैनपेज में उपलब्ध हैंsystemd.unit(5)

/etc/systemd/system/foo.target.wants/

यह वह निर्देशिका है जहां आप अपने द्वारा बनाई गई सेवाओं को अपने लक्ष्य के लिए लिंक / आवश्यक करेंगे। यह Wants=इकाई फ़ाइल में विकल्प के बराबर है । इस निर्देशिका को बनाएं और फिर सिमिलिंक बनाएं जैसे; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service। यह सिस्टम निर्देशिका में bar.service से आपके foo.target.wants निर्देशिका के लिए एक सिमलिंक बनाता है।


मुझे लगता है कि किसी सेवा के लिए एक इकाई फ़ाइल बनाना इस उत्तर के दायरे से बाहर है, और यह प्रश्न निश्चित रूप से अधिक प्रलेखित है, इसलिए मैं इसे अभी के लिए छोड़ दूँगा। जब आप अपनी यूनिट फ़ाइल बनाते हैं, तो इसे लक्ष्य में रखें। डायरेक्टरी में इसे जोड़ें या Wants=निर्देश में जोड़ें ।


मैंने एक नया लक्ष्य बनाने के लिए उपरोक्त का पालन किया और अपनी सेवा में कुछ लक्ष्य जोड़े। हालाँकि, सिस्टम द्वारा उन सेवाओं में से कोई भी शुरू नहीं हुआ है। क्या एक पूरा उदाहरण है जो नए जोड़े गए लक्ष्य के भीतर सेवाओं को प्रदर्शित करता है?
linuxfan

1
यदि आप बूट पर चलने के लिए कस्टम सेवा सेट करने के लिए सरल चरणों की तलाश में हैं तो नेक्रोमैंसर का स्टैक पोस्ट देखें ।
Pilbox

@linuxfan मैं जोड़ने foo.targetके लिए Requiresक्षेत्र और Beforeके क्षेत्र multi-user.targetऐसा है, और Requires: base.target foo.target। उसके बाद मैं अपने आर्क लिनक्स वीएम को रिबूट करता हूं, और foobar.serviceस्वचालित रूप से डेमन के रूप में चलेगा।
L_K

2
अच्छा जवाब, लेकिन यह वास्तव में काम नहीं करता है जैसा कि आप अपेक्षा करेंगे। 1. सिर्फ इसलिए कि यह चाहता है इसका मतलब यह नहीं है कि सेवा उस लक्ष्य के साथ शुरू होगी। 2. multi-user.target में कुछ प्रकार की छिपी हुई चीजें हैं जो इसे काम करती हैं।
ओथियस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.