systemd ExecCondition से घरेलू VPN छोड़ें
जानबूझकर छोड़ना और टूटा हुआ तैयारी आदेश दो अलग परिणाम हैं। हेल्पर के एक्ज़िट कोड तय करें, फिर नेटवर्क के बीच बदलाव जाँचें।
जब लैपटॉप पहले से उसी नेटवर्क पर हो, तो घरेलू नेटवर्क के VPN के पास करने को कुछ नहीं होता। लुभावना शॉर्टकट वह तैयारी आदेश है जो गैर-शून्य कोड के साथ बाहर निकलता है; यह यूनिट को विफल कर देता है और हर डैशबोर्ड को टूटा हुआ दिखाता है। systemd के पास ठीक इसी तरह के निर्णय के लिए एक निर्देश है, और वह जानबूझकर छोड़ने को असली खराबी से अलग करता है। इसे ठीक से करना मुख्य रूप से यह लिखने की बात है कि हर एक्ज़िट कोड का क्या अर्थ है।
विफल पूर्वशर्त गलत आकार क्यों है
ExecStartPre गैर-शून्य एक्ज़िट को स्टार्टअप विफलता मानता है, जो सेवा तैयार करने वाले आदेश के लिए सही है। इसे शर्त के रूप में इस्तेमाल करने से नीति-निर्णय टूटी हुई निर्भरता से अलग नहीं पहचाना जा सकता। ExecCondition इसलिए मौजूद है ताकि यूनिट विफल चिह्नित हुए बिना शुरू होने से मना कर सके।
यह अंतर रात तीन बजे मायने रखता है, जब कोई डिज़ाइन के अनुसार व्यवहार कर रही लाल यूनिट की जाँच नहीं करना चाहता। विफल यूनिट जानबूझकर की गई विफलताओं के बीच असली खराबियों को भी छिपा देती है।
पहले एक्ज़िट-कोड अनुबंध लिखें
स्क्रिप्ट से पहले अनुबंध लिखें। शून्य एक्ज़िट का अर्थ है जारी रखना, एक एक्ज़िट का अर्थ है बाकी स्टार्ट आदेश छोड़ देना, और 255 एक्ज़िट का अर्थ है कि शर्त स्वयं नहीं चल सकी। दो और 254 के बीच के कोड भी आम तौर पर छोड़ने का अर्थ रखते हैं, जिसे भूलना आसान है जब हेल्पर कोई यादृच्छिक त्रुटि कोड लौटाता है। नीचे दिया drop-in हेल्पर को यूनिट के असली नाम से जोड़ता है।
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnडिफ़ॉल्ट अर्थ मानने से पहले प्रभावी यूनिट में विरासत में मिली SuccessExitStatus या stop-post सेटिंग्स जाँचें। फिर तीनों परिणामों में से हर एक को जानबूझकर जाँचें।
नेटवर्क संकेत स्थान का प्रमाण नहीं है
पहुँचने योग्य राउटर पता या ज्ञात MAC सही नेटवर्क का संकेत दे सकते हैं, और इनमें से कोई भी इसे साबित नहीं करता। दूसरा नेटवर्क वही पता दोबारा इस्तेमाल कर सकता है, ARP डेटा पुराना हो सकता है, और पहचानकर्ताओं की नकल की जा सकती है। जाँच को नीति के अनुरूप अनुकूलन मानें, प्रमाणीकरण परिणाम नहीं।
अनिश्चितता का अर्थ पहले से तय करें। संदेह होने पर VPN शुरू करना ऐसे क्लाइंट के लिए सुरक्षित है जो बस जुड़ नहीं पाता; संदेह होने पर उसे छोड़ देना सुरक्षित नहीं है। जाँच को सीमित रखें, और सूची में पहले वाले को मानने के बजाय सक्रिय इंटरफ़ेस पढ़ें। जो जाँच अटक जाती है वह “नहीं” कहने वाली जाँच से बुरी है, क्योंकि यूनिट उसका इंतज़ार करती है।
उन धारणाओं को यूनिट फ़ाइल के पास दर्ज करें ताकि अगला व्यक्ति जान सके कि हेल्पर क्या मानता है। स्क्रिप्ट के शीर्ष पर टिप्पणी उन्हें रखने की सबसे सस्ती जगह है।
नेटवर्क के बीच बदलाव संभालें
शर्त सेवा शुरू होने पर चलती है, और बाद में दोबारा मूल्यांकन नहीं करती। लैपटॉप के कैफ़े में जाने के बाद भी छोड़ी गई यूनिट छोड़ी हुई ही रहती है, और लैपटॉप के घर लौटने के बाद भी चल रहा टनल बना रहता है। नेटवर्क परिवर्तन के जीवनचक्र को अलग तंत्र से शुरू और बंद के निर्णय से जोड़ें।
systemctl cat home-vpn.serviceचार स्थितियाँ जाँचें: घर पर स्टार्टअप, बाहर स्टार्टअप, ऐसी जाँच जो चल न सके, और यूनिट सक्रिय रहते नेटवर्क के बीच बदलाव। जर्नल में छोड़ने का कारण दिखाई देता रखें ताकि जानबूझकर लिया गया निर्णय कभी प्रमाणीकरण विफलता जैसा न लगे। सेवा संदर्भ एक्ज़िट के अर्थ और न्यूनतम संस्करण का दस्तावेज़ीकरण करता है।