Kas OpenVPN up-skript käivitus liiga vara või ei olnud see kunagi valmis?
up-konks käivitub, kui tunneliseade ilmub, enne marsruute ja rakenduste valmidust. Kohandage skript sündmusega, mida see vajab, selle asemel et lisada ootamine.
up-skript käivitub, väljub nulliga ja selles olev ülesanne ei jõua privaatteenuseni, mis kaks sekundit hiljem töötab terminalist laitmatult. Instinkt ütleb ajastus ja tavaline parandus on ootamine, mis peidab võidujooksu seda mõistmata. Kasulikum lugemine on, et “up” nimetab konksu, mitte valmiduse garantiid. See käivitub, kui tunneliseade konfigureeritakse, mis on varem kui marsruudid, DNS ja kindlasti varem kui ükski rakendus tunneli taga.
Kestatest õnnestus, sest see käivitus pärast seda, kui kõik rahunes. Konks käivitus ühel kindlal hetkel.
Kus up käivitusjärjekorras asub
OpenVPN konfigureerib tunneliseadme ja käivitab seejärel up-konksu. Marsruutide paigaldamine on hilisem etapp ja sellel on oma konks, mistõttu up-i paigutatud marsruudist sõltuv ülesanne võib näha seadet ilma kasuliku teeta. Pange marsruuditöö route-up-i ja ajastusprobleem kaob tavaliselt.
Käsiraamat dokumenteerib selle järjekorra ja keskkonna, mille iga konks saab. See järjekord on kogu seletus klassikalisele raportile “töötab minu kestast” ja see on ka põhjus, miks sama skript võib ühes masinas läbida ja teises aeglasema marsruudietapi tõttu ebaõnnestuda. Kumbki tulemus ei ütle skripti kvaliteedi kohta midagi.
DNS-i ja rakenduste valmidus tuleb veelgi hiljem. Isegi paigaldatud marsruudid ei ole tõestus, et kaugots kuulab, et nimi laheneb või et kasutajaga seotud ülesande jaoks on töölaua sessioon olemas.
Mida konks tegelikult pärib
Konks töötab OpenVPN-i protsessi konto ja keskkonna all, mis ei ole sama mis teie interaktiivne kest. Sellel võib puududa kasutaja sessioonisiin, töölauakeskkond või volitus, mis avatakse alles sisselogimisel. Kirjutage üles, mida neist ülesanne tegelikult vajab.
See loeb ülesannete puhul, mis näevad välja võrguna, kuid sõltuvad kasutajakontekstist: kasutaja volitusega jagatud ressursi ühendamine, kasutajapõhise puhverserveri seadistamine või printeri konfigureerimine. Privilegeeritud tunnelikonks on nende jaoks vale koht ja ükski ootamine ei paranda puuduvat sessiooni.
Kui ülesanne konksus ebaõnnestub, registreerige konto, keskkond ja esimene ebaõnnestunud toiming. See eristab enneaegset ajastust loa- või kontekstiprobleemist ning kahel on täiesti erinevad parandused. Nende vahel oletamine on see, kuidas viieminutilisest parandusest saab terve pärastlõuna.
Miks ootamise lisamine ei ole valmiduskontroll
Ootamine lükkab skripti edasi ja nihutab võidujooksu akent. Kiirel päeval õnnestub ülesanne; aeglasel päeval ebaõnnestub see jälle ja riket on raskem korrata, sest viivitus näib toimivat. Viivitus, mis toimib ainult kerge koormuse all, on kokkusattumus, mitte parandus.
Kui sõltuvus on marsruut, kasutage konksu, mis vastab marsruudi paigaldamisele. Kui sõltuvus on teenus tunneli taga, kasutage piiratud kontrolli, mis ootab just seda tingimust ja ebaõnnestub selgelt, kui see kunagi ei saabu.
Hoidke rike selgesõnaline. Konks, mis väljub nulliga, samal ajal kui selle tegelik töö ebaõnnestus, on hullem kui konks, mis ebaõnnestub, sest teenusehaldur registreerib õnnestumise ja keegi ei vaata enam. Logirida skriptist endast on kõige odavam viis seda ausana hoida.
Puhastamine ja taasühendamine väärib sama hoolt
Skript, mis muudab jagatud olekut, vajab vastavat tagasivõtuteed. Konksu lisatud marsruudid, resolveri kirjed ja tulemüürimärgised peaksid olema idempotentsed ja pööratavad, muidu kuhjab taasühendamine teise koopia esimese peale.
Taasühendused võivad konksusid käivitada ka sagedamini kui teenuse täiskäivitus. Püsiv liides, mis sessiooni taastab, võib up- ja route-up-tsükli uuesti käivitada, nii et skript, mis eeldab ühte käivitust alglaadimise kohta, hakkab lõpuks valesti käituma. Loendage käivitused logis ühe laperdamispäeva jooksul, et näha, kui sageli see tegelikult töötab. Seejärel tehke skript turvaliseks nii paljudeks käivitusteks.
Testige nurjunud elutsüklit, mitte hilisemat käsku. Taasesitage alglaadimine või taasühendamine, jälgige konksu käivitumist ja kinnitage, et ülesanne õnnestus hetkel, mil see tegelikult töötab. Hilisem edu interaktiivsest kestast on tõend sõltuvuse kohta, mitte tõestus, et alglaadimistee toimib.
Nimetage sündmus, millest iga ülesanne sõltub, ja kinnitage see seejärel selle sündmuse külge. Kõik muu on viivitus, mis teeskleb kontrolli.