सिस्टम यूनिट फ़ाइलों को रखने के लिए सबसे अच्छी जगह : /etc/systemd/system
बस [इंस्टॉल] अनुभाग के तहत एक लक्ष्य जोड़ना सुनिश्चित करें, "यह कैसे पता चलता है?" ब्योरा हेतु। अद्यतन : /usr/local/lib/systemd/system
एक और विकल्प है, विवरण के लिए "ग्रे एरिया" पढ़ें।
उपयोगकर्ता इकाई फ़ाइलों को रखने के लिए सबसे अच्छी जगह : /etc/systemd/user
या $HOME/.config/systemd/user
यह अनुमतियों और स्थिति पर निर्भर करता है।
सच्चाई यह है कि सिस्टमड इकाइयां (या जैसा कि इंट्रो वाक्य उन्हें कहता है, "यूनिट कॉन्फ़िगरेशन") कहीं भी जा सकता है -प्रोवर्ड आप मैनुअल सिम्बलिंक बनाने के इच्छुक हैं और आपको कैविट्स के बारे में पता है। यह इकाई को रखना आसान बनाता है जहां systemctl daemon-reload
कुछ अच्छे कारणों के लिए इसे पा सकते हैं:
- एक मानक स्थान का उपयोग करने का मतलब है कि सिस्टमड जनरेटर्स उन्हें ढूंढेंगे और बूट के साथ उन्हें सक्षम करना आसान बना देंगे
systemctl enable
। ऐसा इसलिए है क्योंकि आपकी इकाई स्वचालित रूप से एक इकाई निर्भरता पेड़ (एक इकाई कैश) में जोड़ दी जाएगी।
- आपको अनुमतियों के बारे में सोचने की आवश्यकता नहीं है, क्योंकि केवल सही विशेषाधिकार प्राप्त उपयोगकर्ता निर्दिष्ट क्षेत्रों को लिख सकते हैं।
यह कैसे पता चलता है?
और वास्तव में कैसे systemctl enable
पता चलता है कि सिमलिंक कहाँ बनाया जाए? आप इसे [install]
अनुभाग के अंतर्गत इकाई के भीतर हार्ड कोड देते हैं । आमतौर पर जैसी लाइन होती है
[Install]
WantedBy = multi-user.target
जो फाइल सिस्टम पर पूर्वनिर्धारित जगह से मेल खाती है। इस तरह, यह systemctl
जानता है कि यह इकाई इकाई फ़ाइलों के एक समूह पर निर्भर है जिसे multi-user.target
"लक्ष्य" कहा जाता है। यह निर्भरता समूहों को नामित करने के लिए प्रयोग किया जाता है। आप सभी समूहों को सूचीबद्ध कर सकते हैं systemctl list-units --type target
)। एक लक्ष्य के साथ लोड की जाने वाली इकाई फ़ाइलों का समूह एक targetname.target.wants
निर्देशिका में रखा जाता है । यह सिम्बलिंक (या वास्तविक चीज़) से भरी एक निर्देशिका है। अपने तो [Install]
खंड कहते हैं कि यह है , लेकिन अगर यह करने के लिए एक सिमलिंक में मौजूद नहीं है निर्देशिका, तो यह लोड नहीं होगा। जब सिस्टमड यूनिट जेनरेटर बूट पर निर्भरता ट्री कैश में आपकी यूनिट फाइल जोड़ते हैं (आप मैन्युअल रूप से जनरेटर को ट्रिगर कर सकते हैं ), तो यह स्वचालित रूप से जानता है कि इस मामले में डायरेक्टरी में सिमलिंक कहां रखा जाए।WantedBy
multi-user.target
multi-user.target.wants
systemctl daemon-reload
/etc/systemd/system/multi-user.target.wants/
क्या आपको इसे सक्षम करना चाहिए।
मैनुअल में मुख्य बिंदु:
अतिरिक्त यूनिटों को सिस्टम लोड ("लिंक्ड") में लोड किया जा सकता है, न कि यूनिट लोड पथ पर निर्देशिकाओं से। Systemctl (1) के लिए लिंक कमांड देखें।
Systemctl के तहत, Unit File Commands को देखें
यूनिट फ़ाइल लोड पथ
यूनिट फ़ाइलों को संकलन के दौरान निर्धारित पथों के एक सेट से लोड किया गया है, नीचे दो तालिकाओं में वर्णित है। पहले से सूचीबद्ध निर्देशिकाओं में मिली यूनिट फाइलें सूची में समान नाम वाली फाइलों को ओवरराइड करती हैं।
जब चर $SYSTEMD_UNIT_PATH
सेट किया जाता है, तो इस चर की सामग्री यूनिट लोड पथ को ओवरराइड करती है। यदि $SYSTEMD_UNIT_PATH
एक खाली घटक (":") के साथ समाप्त होता है, तो सामान्य इकाई लोड पथ को चर की सामग्री में जोड़ा जाएगा।
तालिका 1 और तालिका 2 से man systemd.unit
अच्छे हैं।
सिस्टम मोड में चलने पर पथ लोड करें ( --system
)।
/etc/systemd/system
स्थानीय विन्यास
/run/systemd/system
रनटाइम इकाइयों
/usr/lib/systemd/system
स्थापित पैकेजों की इकाइयाँ
उपयोगकर्ता मोड में चलते समय लोड पथ ( --user
)
प्रति उपयोगकर्ता इकाइयों और सभी / वैश्विक उपयोगकर्ता इकाइयों के बीच अंतर है ।
उपयोगकर्ता पर निर्भर
$XDG_CONFIG_HOME/systemd/user
उपयोगकर्ता कॉन्फ़िगरेशन (केवल जब $XDG_CONFIG_HOME
सेट किया जाता है)
$HOME/.config/systemd/user
उपयोगकर्ता कॉन्फ़िगरेशन (केवल जब $XDG_CONFIG_HOME
सेट नहीं किया जाता है)
$XDG_RUNTIME_DIR/systemd/user
रनटाइम इकाइयों (केवल जब $XDG_RUNTIME_DIR
सेट किया जाता है)
$XDG_DATA_HOME/systemd/user
पैकेजों की इकाइयाँ जो गृह निर्देशिका में स्थापित की गई हैं (केवल तब उपयोग की जाती हैं जब $XDG_DATA_HOME
सेट की जाती हैं)
$HOME/.local/share/systemd/user
पैकेजों की इकाइयाँ जो गृह निर्देशिका में स्थापित की गई हैं (केवल तब उपयोग की जाती हैं जब $XDG_DATA_HOME
सेट नहीं होती हैं)
--global
(सभी उपयोगकर्ताओं)
सभी उपयोगकर्ताओं पर लागू होने वाली इकाइयाँ - प्रत्येक उपयोगकर्ता के स्वामित्व वाली अर्थ भी। इसलिए प्रत्येक उपयोगकर्ता इन सेवाओं को रोक सकता है, भले ही कोई प्रशासक उन्हें बूट करने में सक्षम करे।
/etc/systemd/user
सभी उपयोगकर्ताओं के लिए स्थानीय कॉन्फ़िगरेशन ( systemctl --global enable userunit.service
)
/usr/lib/systemd/user
संकुल की इकाइयाँ जो सभी उपयोगकर्ताओं के लिए सिस्टम-वाइड स्थापित की गई हैं
/run/systemd/user
रनटाइम इकाइयों
ग्रे एरिया
एक ओर, फ़ाइल पदानुक्रम मानक निर्दिष्ट करता /etc
है जो स्थानीय कॉन्फ़िगरेशन के लिए है जो बायनेरिज़ को निष्पादित नहीं करता है। दूसरी ओर यह निर्दिष्ट करता है कि /usr/local/
"स्थानीय रूप से सॉफ़्टवेयर स्थापित करते समय सिस्टम व्यवस्थापक द्वारा उपयोग के लिए है"। आप यह भी तर्क दे सकते हैं (यदि केवल संगठन के उद्देश्य के लिए) नहीं है कि सभी सिस्टम यूनिट फ़ाइलों के तहत जाना चाहिए /usr/local/lib/systemd/system
, लेकिन यह यूनिट फाइलों के लिए है जो पैकेज प्रबंधक से नहीं "सॉफ्टवेयर" का हिस्सा हैं। सिस्टम-वाइड हैं जो संबंधित systemd उपयोगकर्ता इकाइयाँ चल सकती हैं
/usr/local/lib/systemd/user
।
/etc/systemd/system
वह जगह है जहाँ आप अपनी स्क्रिप्ट डालते हैं, pacman पैकेज स्क्रिप्ट डालता है/usr/lib/systemd/system
और जारी करनेsystemctl enable foo.service
से/usr
/etc