सिस्टमड-नेटवर्कड के साथ, नेटवर्क कॉन्फ़िगरेशन परिवर्तन पर एक क्रिया करें


10

मैं डेबियन के से स्विच कर रहा हूँ ifupdownकरने के लिए systemd-networkd, और यह ज्यादातर ठीक काम करता है। एक गायब बिट यह है कि हर नेटवर्क में बदलाव होने पर, मैं कॉल करना चाहता हूं killall -ARLM tinc, ताकि मेरा वीपीएन समयबद्ध तरीके से बढ़ जाए।

इस तरह की कार्यक्षमता प्रदान करता है systemdया करता है systemd-networkd? मैं इसका उपयोग कैसे करूंगा?

जवाबों:


3

मैं networkd-dispatcherइंटरफ़ेस स्थिति परिवर्तन के बाद ईवेंट चलाने के लिए उपयोग कर रहा हूं :

Networkd- डिस्पैचर systemd-networkd कनेक्शन स्थिति में परिवर्तन के लिए एक डिस्पैचर डेमॉन है। यह डेमन NetworkManager-डिस्पैचर के समान है, लेकिन सिस्टमड-नेटवर्कड की सीमित प्रकृति के कारण इस प्रकार की घटनाओं में यह अधिक सीमित है।

Gitlab से लिंक करें


यह डेबियन 10 (बस्टर) में शामिल है।
जॉन एकेनबेरी

2

प्रत्यक्ष संकेतों को भेजने के बजाय टिनक को सिस्टमड यूनिट के रूप में अपडेट किया जाना चाहिए। यह एक जरूरत है अपनी इकाई फ़ाइलों को कॉन्फ़िगर करने के लक्ष्य को हासिल करने के लिए उपयुक्त के साथ श्रृंखलित जा करने के लिए Require=, Before=और After=में लाइनों [Unit]अनुभाग। यह भी सुनिश्चित करें कि आप WantedBy=नेटवर्क सेवाओं के लिए सही सेट करते हैं। (अर्थात , WantedBy={ , } , के बजाय )network.targetnetwork-online.targetnetwork-pre.targetmulti-user.target

यह systemctl restart systemd-networkd.serviceआपके नेटवर्क को पुनरारंभ करने के लिए निष्पादित करने की अनुमति देता है । इसके साथ संयुक्त systemd-resolvd, udev/ dbus(प्लस wpa_supplicant@nic.serviceजब वाईफ़ाई पर) और किसी का नेटवर्क बस काम करता है।

सिस्टमड-नेटवर्कड और यूनिट निर्भरता पर स्विच करने के लेखों को पढ़ना सुनिश्चित करें । यह भी कमांड के systemd.serviceमाध्यम से आपकी यूनिटों को सिग्नल भेजने का एक तरीका है , systemctl killजैसा कि सिस्टमट्रेडर गाइड के लिए सिस्टमड में प्रलेखित है


मैं वास्तव में पालन नहीं करता। इसलिए अगर tinc को systemd सेवा के रूप में चलाया जाता है, तो मैं systemctl killसिग्नल देने के लिए उपयोग कर सकता हूं । लेकिन मैं यह नहीं देखता कि नेटवर्क कॉन्फ़िगरेशन में परिवर्तन कैसे किया जाए।
जोकिम ब्रेटनर

आप सिस्टमड के सिगनलिंग का उपयोग केवल लक्ष्य और संबंध निर्भरता पर नहीं करेंगे। इस प्रकार एक बार जब आपका नेटवर्क इंटरफेस इस सिग्नल (आंतरिक रूप से सिस्टमड) में है network.targetतो network-online.targetउस यूनिट को किक करने के लिए अन्य निर्भरताएं । तो बस tinc.serviceशामिल है Requires=systemd-networkd.serviceऔर WantedBy=network-online.targetतब जब systemd-networkd बंद हो जाता है जो निक और ट्यून इंटरफ़ेस को लाएगा, एक IP पता स्थापित करेगा, और फिर आवश्यकतानुसार शुरू या पुनः आरंभ करने के लिए संकेत देगा।
ड्वाइट स्पेंसर

मुझे भी सेवा पुनरारंभ करने का एक तरीका नहीं मिल रहा है, क्योंकि network-online.target डिस्कनेक्ट पर बंद नहीं होता है (यह वास्तव में इसके लिए एक बग रिपोर्ट दर्ज करना चाहिए ...)। मैंने एक /etc/NetworkManager/dispatcher.d/ स्क्रिप्ट का सहारा लिया , जिसमें शामिल हैcase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584

1
मुझे यह मनोरंजक लगता है कि आप उस व्यक्ति द्वारा लिखे गए लेख से जुड़े हैं जिसका सवाल आप जवाब दे रहे हैं। :) बेशक यह इस उत्तर के पाठकों के लिए उपयोगी है, लेकिन यह अभी भी मजेदार है।
वाइल्डकार्ड

1

वर्तमान में यह संभव नहीं है। हालाँकि आप केवल systemd-networkd-wait-online.servicetinc को फिर से कॉन्फ़िगर करने के लिए बूट पर निर्भरता के रूप में उपयोग कर सकते हैं । मेरे अनुभव में tinc नेटवर्क कॉन्फ़िगरेशन में बदलाव पर जल्दी प्रतिक्रिया देगा। कम से कम लाइनक्स पर यह इंटरफेस बदलावों को सुनने के लिए rtnetlink का उपयोग कर सकता है।

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