Dit hjemmenetværks-VPN har intet at gøre, når bærbaren allerede sidder på det netværk. Den fristende genvej er en forberedelseskommando, der afslutter med en kode, der ikke er nul; det får unit'en til at fejle og får hvert dashboard til at se ødelagt ud. systemd har et direktiv til netop denne form for beslutning, og det adskiller et bevidst spring fra en egentlig fejl. At gøre det rigtigt handler mest om at skrive ned, hvad hver exitkode betyder.

Hvorfor en fejlende forudsætning er den forkerte form

ExecStartPre betragter en ikke-nul exit som en opstartsfejl, hvilket er korrekt for en kommando, der forbereder tjenesten. Bruges den som en betingelse, bliver en politikbeslutning umulig at skelne fra en ødelagt afhængighed. ExecCondition findes, så en unit kan afvise at starte uden at blive markeret som fejlet.

Den forskel betyder noget klokken tre om natten, hvor ingen gider at triage en rød unit, der opførte sig som designet. En fejlet unit skjuler også de rigtige fejl blandt de bevidste.

Skriv exitkodekontrakten først

Skriv kontrakten før scriptet. Exit nul betyder fortsæt, exit et betyder spring de resterende startkommandoer over, og exit 255 betyder, at betingelsen selv ikke kunne køre. Koder mellem to og 254 betyder normalt også spring, hvilket er let at glemme, når en hjælper returnerer en tilfældig fejlkode. Drop-in-filen nedenfor knytter hjælperen til det rigtige unitnavn.

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

Kontrollér den effektive unit for nedarvede SuccessExitStatus- eller stop-post-indstillinger, før du antager standardsemantikken. Test derefter hvert af de tre udfald bevidst.

Et netværkstip er ikke bevis for placering

En nåbar routeradresse eller en kendt MAC kan antyde det rigtige netværk, og ingen af dem beviser det. Et andet netværk kan genbruge den samme adresse, ARP-data kan være forældede, og identifikatorer kan efterlignes. Behandl sonderingen som en optimering, der er konsistent med politikken, ikke som et autentificeringsresultat.

Beslut på forhånd, hvad usikkerhed betyder. At starte VPN'et, når du er i tvivl, er sikkert for en klient, der blot ville mislykkes med at forbinde; at springe det over, når du er i tvivl, er det ikke. Gør sonderingen afgrænset, og læs det aktive interface i stedet for at antage det første på listen. En sondering, der hænger, er værre end en, der svarer nej, fordi unit'en venter på den.

Skriv de antagelser ned ved siden af unit-filen, så den næste person ved, hvad hjælperen tror. En kommentar øverst i scriptet er det billigste sted at opbevare dem.

Håndter flytningen mellem netværk

Betingelsen kører, når tjenesten starter, og den revurderes ikke senere. En oversprunget unit forbliver oversprunget, efter at bærbaren er flyttet til en café, og en kørende tunnel forbliver oppe, efter at bærbaren er kommet hjem. Forbind netværksskiftets livscyklus med start- og stopbeslutningen via en separat mekanisme.

systemctl cat home-vpn.service

Test fire tilfælde: opstart derhjemme, opstart ude, en sondering der ikke kan køre, og en flytning mellem netværk, mens unit'en er aktiv. Hold årsagen til springet synlig i journalen, så en bevidst beslutning aldrig ligner en autentificeringsfejl. Tjenestereferencen dokumenterer exit-semantikken og minimumsversionen.

Relaterede artikler