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ನಾಲ್ಕು ಸಂದರ್ಭಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ: ಮನೆಯಲ್ಲಿ ಪ್ರಾರಂಭ, ಹೊರಗೆ ಪ್ರಾರಂಭ, ಚಲಿಸಲಾಗದ ಪರಿಶೀಲನೆ, ಮತ್ತು ಯುನಿಟ್ ಸಕ್ರಿಯವಾಗಿರುವಾಗ ನೆಟ್ವರ್ಕ್ಗಳ ನಡುವಿನ ಸ್ಥಳಾಂತರ. ಜರ್ನಲ್ನಲ್ಲಿ ಬಿಟ್ಟುಬಿಡುವ ಕಾರಣವನ್ನು ಗೋಚರವಾಗಿರಿಸಿ, ಉದ್ದೇಶಪೂರ್ವಕ ನಿರ್ಣಯ ಎಂದಿಗೂ ದೃಢೀಕರಣ ವೈಫಲ್ಯದಂತೆ ಕಾಣದಿರಲಿ. ಸೇವಾ ಉಲ್ಲೇಖ ನಿರ್ಗಮನದ ಅರ್ಥ ಮತ್ತು ಕನಿಷ್ಠ ಆವೃತ್ತಿಯನ್ನು ದಾಖಲಿಸುತ್ತದೆ.