अपस्ट्रीम यूनिट फ़ाइल को बदले बिना सिस्टमड यूनिट फ़ाइल को संशोधित करें


24

मैंने pimdसेवा को इसके माध्यम से स्थापित किया है apt। यह एक अपस्ट्रीम systemdयूनिट फाइल ( /lib/systemd/system/pimd.service) के साथ आता है ।

मैं चाहता हूं कि जब किसी कारण से यह सेवा समाप्त हो जाए तो सेवा को फिर से शुरू किया जाए, इसलिए मैं Restart = alwaysइकाई फ़ाइल में लाइन जोड़ना चाहता हूं ।

हालाँकि, मैं अपस्ट्रीम यूनिट फ़ाइल को संशोधित नहीं करना चाहता।

क्या इसके समाधान की कोई युक्ति है?



आपने क्या प्रयास किया?
030

के संभावित डुप्लिकेट systemd सेवा में सेट वातावरण चर कैसे?
0:30

जवाबों:


35

आपके पास दो विकल्प हैं:

  • से इकाई फाइल कॉपी /lib/systemd/system/करने के लिए /etc/systemd/system/
    और फिर /etc/systemd/system/pimd.serviceपैकेज अनुरक्षक द्वारा आपूर्ति की गई इकाई फ़ाइल (ओं) को पूरी तरह से ओवरराइड करने के लिए अपने संशोधनों को बनाएं ।

    आदेश systemctl edit --full <service-name>आपके लिए इसे स्वचालित करता है।

  • आप .confएक ड्रॉप-इन निर्देशिका में फ़ाइलें बनाकर इकाई फ़ाइलों को संशोधित करने या बनाने के बिना एक इकाई के लिए विशिष्ट कॉन्फ़िगरेशन सेटिंग्स को बदल सकते हैं या जोड़ सकते /etc/systemd/system/<unit-name>.<unit-type>.d/
    हैं।/etc/systemd/system/pimd.service.d/restart.conf

    कमांड systemctl edit <service-name>आपके लिए इन चरणों को पूरा करती है।

देख man systemd.unit


10
दूसरे विकल्प का उपयोग करके आसान बनाया जा सकता हैsystemctl edit <service-name>
मूर

7
और पहले एक का उपयोग करके systemctl edit --full <service-name>
ग्रैविटी

22

आरएचईएल प्रलेखन दो तरीकों की सिफारिश करता है:

  1. कॉन्फ़िगरेशन निर्देशिका और फ़ाइल के तहत बनाकर डिफ़ॉल्ट इकाई फ़ाइल का विस्तार करें /etc/systemd/system/[name-goes-here].service.d/config_name.conf

इस मामले में फ़ाइल को कुछ इस तरह से रखना होगा:

[Service]
Restart=always

यह क्या systemctl edit [name-goes-here]करता है, यह उस निर्देशिका को बनाता है और इसके override.confभीतर।

  1. मूल इकाई फ़ाइल की एक प्रतिलिपि बनाएँ /usr/lib/systemd/system/में /etc/systemd/system/और मेकअप वहाँ बदल जाता है।

मैं एक विकल्प की कोशिश करूंगा, लेकिन वे दोनों व्यवहार्य विकल्प हैं। किसी भी तरह systemctl daemon-reloadसे बदलाव करने के बाद दौड़ना याद रखें ।

सिस्टम यूनिट बनाने और संशोधित करने पर आरएचईएल प्रलेखन


0

अपस्ट्रीम कॉन्फ़िगरेशन को पढ़ने के लिए एक स्क्रिप्ट का उपयोग करने पर विचार करें, इसे संशोधित करें और ड्रॉप-इन फ़ाइल में इसे थूक दें।

उदाहरण के लिए, मैं शेफ का उपयोग करता हूं और यहां माणिक (पुस्तकालय) का एक टुकड़ा है जो मूल एक्सेस्टार्ट को प्राप्त करने के लिए मैराथन सिस्टमड यूनिट फ़ाइल को पार्स करता है

require 'inifile'

module Dcos
  def get_execstart_from_unit_file
    marathon_systemd_unit_file = 
IniFile.load('/etc/systemd/system/dcos-marathon.service')
    return marathon_systemd_unit_file['Service']['ExecStart']
  end
end

फिर नुस्खा में, मैं ExecStart का विकल्प चुनने के लिए ड्रॉप-इन फ़ाइल बनाता हूं

chef_gem 'inifile'

exec_start_orig = get_execstart_from_unit_file

systemd_service_drop_in 'dcos-marathon' do
  override 'dcos-marathon.service'
  precursor 'Service' => { 'ExecStart' => nil }
  service do
    exec_start exec_start_orig + ' --env_vars_prefix "DCOS_MARATHON_"'
  end
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.