उत्तर इस बात पर निर्भर करता है कि क्या चर स्थिर माना जाता है (अर्थात, इकाई प्राप्त करने वाले उपयोगकर्ता द्वारा संशोधित नहीं होना चाहिए) या चर (उपयोगकर्ता द्वारा निर्धारित किया जाना चाहिए)।
चूंकि यह आपकी स्थानीय इकाई है, इसलिए सीमा काफी धुंधली है और किसी भी तरह से काम करेगी। हालांकि, अगर आपने इसे वितरित करना शुरू कर दिया और यह खत्म /usr/lib/systemd/system
हो जाएगा, तो यह महत्वपूर्ण हो जाएगा।
नियत मान
यदि मूल्य को प्रति उदाहरण बदलने की आवश्यकता नहीं है, तो पसंदीदा तरीका इसे Environment=
सीधे, यूनिट फ़ाइल में रखा जाएगा:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
इसका फायदा यह है कि वेरिएबल को यूनिट के साथ सिंगल फाइल में रखा जाता है। इसलिए, सिस्टम के बीच इकाई फ़ाइल को स्थानांतरित करना आसान है।
चर मान
हालाँकि, उपरोक्त समाधान अच्छी तरह से काम नहीं करता है जब स्थानीय स्तर पर पर्यावरण चर के मान को बदलने के लिए sysadmin माना जाता है। विशेष रूप से, यूनिट फ़ाइल अपडेट होने पर हर बार नए मूल्य को सेट करना होगा।
इस स्थिति के लिए, एक अतिरिक्त फ़ाइल का उपयोग किया जाना है। कैसे - आमतौर पर वितरण नीति पर निर्भर करता है।
एक विशेष रूप से दिलचस्प समाधान /etc/systemd/system/myservice.service.d
निर्देशिका का उपयोग करना है । अन्य समाधानों के विपरीत, यह निर्देशिका स्वयं systemd द्वारा समर्थित है और इसलिए बिना वितरण-विशिष्ट पथों के साथ आती है।
इस स्थिति में, आप एक ऐसी फ़ाइल रखते हैं /etc/systemd/system/myservice.service.d/local.conf
जो यूनिट फ़ाइल के लापता भागों को जोड़ती है:
[Service]
Environment="FOO=bar baz"
बाद में, सिस्टमड ने सेवा शुरू करते समय दो फाइलों को मर्ज कर दिया (याद रखें systemctl daemon-reload
कि उनमें से किसी को बदलने के बाद)। और चूंकि इस पथ का उपयोग सीधे systemd द्वारा किया जाता है, आप इसके EnvironmentFile=
लिए उपयोग नहीं करते हैं ।
यदि मान केवल कुछ प्रभावित प्रणालियों पर बदला जाना है, तो आप दोनों समाधानों को जोड़ सकते हैं, यूनिट में सीधे डिफ़ॉल्ट और दूसरी फ़ाइल में एक स्थानीय ओवरराइड प्रदान कर सकते हैं।
sysconfig
पथ फेडोरा के लिए विशिष्ट है लेकिन सवाल आर्क लिनक्स के बारे में है। Paluh द्वारा जवाब मुझे लगता है कि और अधिक दिलचस्प है