Systemd में 'लिंक्ड' यूनिट फाइल्स को एनेबल करना


10

मैं अभी भी प्रणाली के साथ पकड़ रहा हूँ और कुछ में चला गया है। यह इतनी समस्या नहीं है, लेकिन मैं इसके बारे में और अधिक सीखना चाहूंगा। मुझे कहीं और इसका कोई संदर्भ नहीं मिला।

सबसे पहले, मैं समझता हूं कि सेवाओं के लिए कस्टम इकाई फ़ाइलों में जाना चाहिए /etc/systemd/system। हालांकि, हमारे सर्वर के प्रबंधन के लिए अच्छा होगा यदि यूनिट फाइलें कहीं और स्थित हो सकती हैं।

दस्तावेज़ीकरण में, मैंने देखा कि आप इस तरह से यूनिट फ़ाइलों को 'लिंक' कर सकते हैं:

systemctl link /path/to/servicename.service

यह उपरोक्त में एक लिंक बनाएगा /etc/systemd/system। अब आप इस सेवा को शुरू / बंद कर सकते हैं। सतह पर, यह हमारी सेवाओं का प्रबंधन करने के लिए एक अच्छा तरीका है।

हालाँकि, इस तरह की 'लिंक' इकाई फ़ाइल को विफल करने में सक्षम करने की कोशिश कर रहा है:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

ठीक उसी यूनिट फ़ाइल का उपयोग करना, लेकिन /etc/systemd/systemलिंक किए गए के बजाय में कॉपी किया गया, आपको मिलता है:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

इससे, ऐसा लगता है कि सिस्टम फ़ाइलों में सिस्टम स्टार्टअप पर कॉल करने के लिए लिंक को सक्षम करना संभव नहीं है।

यदि ऐसा है, तो 'लिंक' की कार्यक्षमता का क्या मतलब है? डॉक्स से, यह कहता है:

FILENAME लिंक करें

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

जवाबों:


15

मैन पेज भ्रामक है।

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

पहला ऐसा करना आपके लिए संभव बनाता है systemctl start myservice। दूसरा यह संभव करता है कि myserviceस्वचालित रूप से शुरू किया जा सके (जो @ जुलिएन ने बताया, स्वचालित रूप से जोड़ता है link)।

मुझे लगता है ... मैं इस पूरे दिन अपने सिर को लपेटने की कोशिश कर रहा हूं।


1
ध्यान दें कि systemctl enableयह भी करेगा systemctl link, इसलिए 2 आज्ञाओं को टाइप करने की कोई आवश्यकता नहीं ;-)
जुलिएन

@ जूलियन ओह, जब हमने आपको यह लिखा था, जब मैंने पिछले साल इसे लिखा था। मुझे लगता है कि मुझे आखिरकार पिछले महीने एहसास हुआ!
शुभ

मुझे लगता है कि बहुत कम लोग इस बारे में जानते हैं। आपको बहुत - बहुत धन्यवाद!
काइल

10

डिफ़ॉल्ट पथों की तुलना में किसी अन्य पथ से सेवा को सक्षम करते समय आपको पूर्ण पथ का उपयोग करना चाहिए। सक्षम आपके लिए लिंक भी बनाएगा:

systemctl enable /root/myservice.service

एक बार सक्षम होने के बाद आप सेवा नाम के साथ शुरू / रोक सकते हैं

systemctl start myservice

यहाँ कुछ चेतावनी:

  • आप एक ऐसी सेवा फ़ाइल को सक्षम नहीं कर सकते जो अपने आप में पहले से ही एक कड़ी है
  • सुनिश्चित करें कि पथ एक ही माउंटेड डिस्क पर है। यदि यह नहीं है, तो सिस्टम बूट पर सर्विस यूनिट फाइलों को लोड नहीं कर पाएगा क्योंकि डिस्क अभी तक माउंट नहीं की जाएगी और फाइलें नहीं मिलेंगी। ( माउंटेड डिस्क पर सिस्टमड लिंक्ड यूनिट फाइल को लोड करने में विफल देखें )
  • systemd में बग के कारण आप ऐसी इकाई फ़ाइल से इंस्टेंस सक्षम नहीं कर सकते हैं जो एक गैर मानक पथ में है (देखें https://github.com/systemd/systemd/issues/661 )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.