क्या मैं सिस्टमिक की सेवा के रूप में एक प्रतीकात्मक लिंक का उपयोग कर सकता हूं?


14

उदाहरण के लिए, मैं नाम के एक सेवा है mysshd.serviceके तहत /usr/lib/systemd/system/निर्देशिका। क्या मैं एक प्रतीकात्मक लिंक बना सकता हूँ जैसे:

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

ताकि मैं मूर्ख के साथ जो भी ऑपरेशन करूं, वह mysshd.service( systemctl enable/disable start/stop fool.servce) को प्रतिबिंबित हो जाए ?

मेरा उद्देश्य यह है कि अपनी स्वयं की sshd सेवा के प्रतीकात्मक लिंक द्वारा मूल sshd सेवा को अधिलेखित कर दूं।


1
अपनी सेवा को क्यों न जोड़ें और सक्षम करें और मूल sshd सेवा को अक्षम करें?
लैम्बर्ट

मैं चाहता हूं कि मेरा सॉफ़्टवेयर पिछले संस्करण के साथ संगत है जो एक प्रतीकात्मक लिंक /etc/init.d/ssh -> /etc/init.d/myssh का उपयोग करता है।
निक

मुझे अभी भी ठीक से समझ में नहीं आ रहा है कि आप का क्या मतलब है, लेकिन आपकी लाइन के अनुसार <उद्धरण> ताकि मैं जो भी कार्य मूर्ख के साथ करूं, वह mysshd.service (systemctl enable / disable start / stop fool.servce) </ उद्धरण को प्रतिबिंबित करेगा? > आप sshd के बाद अपनी सेवा शुरू / सक्षम करने के लिए सिस्टमड निर्भरता ( wiki.archlinux.org/index.php/systemd#Handling_d dependencies देखें ) पर एक नज़र डाल सकते हैं ।
लैम्बर्ट

@ स्टैक एक्सचेंज में आपका स्वागत है! स्टाॅक एक्सचेंज पर यह उत्तोलन द्वारा उत्तर के लिए यश दिखाने के लिए प्रथागत है। आप उत्तर के बाईं ओर ऊपर तीर पर क्लिक करके ऐसा कर सकते हैं। यदि मेरे उत्तर ने आपकी समस्या हल कर दी है, तो आप चेकबॉक्स पर क्लिक करने पर भी विचार कर सकते हैं, इसे स्वीकार करने के लिए। धन्यवाद!
स्ट्रूजी

जवाबों:


9

जहाँ तक मुझे पता है, systemd इससे विशेष रूप से अच्छी तरह से नहीं निपटेगा। जैसा कि मैंने इसे समझा, आप के व्यवहार को ओवरराइड करना चाहते हैं sshd.service, है ना?

सौभाग्य से आपके लिए, सिस्टमड को इस तरह की चीज़ के लिए डिज़ाइन किया गया है। बस अपनी सेवा की परिभाषा को रखें /etc/systemd/system/ssh.service, systemctl daemon-reloadइकाई फ़ाइलों को पुनः लोड करने के लिए निष्पादित करें, और सिस्टमड सिस्टम के बजाय स्वचालित रूप से उस कॉन्फ़िगरेशन का उपयोग करेगा ssh.service

systemctl enable mysshd.serviceकाम करना चाहते हैं , भी? कोई दिक्कत नहीं है। [Install]अपनी इकाई फ़ाइल के अनुभाग में, एक पंक्ति जोड़ें जो कहती है Alias=mysshd.service। तब systemctl reenable ssh.serviceसिस्टम सिम्बलिंक को ठीक करने के लिए निष्पादित करें, और आप सुनहरे हैं।

अब, आपने यह विवरण नहीं दिया mysshd.serviceहै कि क्या करना चाहिए। अगर यह सामान्य से पूरी तरह से अलग है ssh.service, महान! उपरोक्त विधि का प्रयोग करें। हालाँकि, यदि आप केवल एक छोटी सी चीज को बदलना चाहते हैं, तो आप गलत दृष्टिकोण का उपयोग कर रहे हैं। systemd आपको यूनिट फाइलों के "स्निपेट्स" बनाने की अनुमति देता है जो सामान्य यूनिट फाइलों के शीर्ष पर लागू होंगे। यह आपको पैकेज प्रबंधक से अपडेट प्राप्त करने के लिए बाकी यूनिट की अनुमति देते समय व्यक्तिगत निर्देशों को जोड़ने या ओवरराइड करने देता है। ऐसा करने के लिए, बस बनाएं /etc/systemd/system/ssh.d/my-custom-config.conf(आप my-custom-config.confजो चाहें बदल सकते हैं, और आपके पास कई ओवरराइड फ़ाइलें भी हो सकती हैं)। उस फ़ाइल में, जो भी निर्देश आप बदलना चाहते हैं या सामान्य रूप से जोड़ दें ssh.service। तुम भी Alias=निर्देश जोड़ सकते हैं , ताकि systemctl start mysshd.serviceकाम करता है! बस अमल करना याद रखेंsystemctl daemon-reloadके बाद आप कर रहे हैं (और, अगर आप का इस्तेमाल किया Alias=, systemctl reenable ssh.service)।

एक तरफ के रूप में, कभी नहीं, कभी में systemd इकाई फ़ाइलों को बदलें /usr/lib/systemd। कभी! फ़ाइलसिस्टम पदानुक्रम मानक की आवश्यकता होती है जिसे /usrकेवल-पढ़ने के लिए माना जाता है। व्यवहार में, इसका मतलब है कि पैकेज प्रबंधक संभालता है /usr(को छोड़कर /usr/local), और आप स्पर्श नहीं करते हैं कि पैकेज प्रबंधक क्या संभालता है - विशेष रूप से क्योंकि आप जो भी बदलते हैं वह संभवतः ओवरराइट हो जाएगा। इसके बजाय, अपना सामान कहीं और रखें /etc


1
इसे थोड़ा स्पष्ट करने के लिए: यदि आप ओवरराइड करना चाहते हैं foo.service, दौड़ना चाहते हैं sudo systemctl edit foo.service, और यह आपके द्वारा टाइप किए गए कुछ को भी बचाएगा /etc/systemd/system/foo.service.d/override.conf
रॉकलाईट

इसके अलावा, Alias=निर्देश ओवरराइड फ़ाइलों में काम नहीं करता है। देखिए github.com/systemd/systemd/issues/1090
Rockallite

@Rockallite के बारे में पता नहीं था systemctl editसमय मैं इस जवाब लिखा पर। Alias=बग को प्रतिबिंबित करने के लिए मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें (" उत्तर के साथ ठीक है" या संपादन संदेश में कुछ)। अच्छी पकड़।
स्ट्रैजी

5

linkपूर्ण पथ के साथ उपयोग करें :

systemctl link /home/nick/myservice.service

ध्यान दें कि आप एक सेवा फ़ाइल को लिंक नहीं कर सकते हैं जो अपने आप में पहले से ही एक लिंक है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.