Skript up sa spustí, skončí s nulou a úloha v ňom nedosiahne na súkromnú službu, ktorá z terminálu o dve sekundy funguje dokonale. Inštinkt hovorí časovanie a zvyčajná oprava je spánok, ktorý pretek zakryje bez toho, aby mu porozumel. Užitočnejšie čítanie je, že “up” pomenúva hák, nie záruku pripravenosti. Aktivuje sa, keď je tunelové zariadenie nakonfigurované, čo je skôr než trasy, DNS a určite skôr než akákoľvek aplikácia za tunelom.

Test v shelli uspel, pretože sa spustil po tom, čo sa všetko ustálilo. Hák sa spustil v jednom konkrétnom momente.

Kde sa up nachádza v poradí štartu

OpenVPN nakonfiguruje tunelové zariadenie a potom spustí hák up. Inštalácia trás je neskoršia fáza a má vlastný hák, preto úloha závislá od trás umiestnená v up môže vidieť zariadenie bez užitočnej cesty. Umiestnite prácu s trasami do route-up a problém s časovaním zvyčajne zmizne.

Príručka dokumentuje toto poradie a prostredie, ktoré každý hák dostane. Toto poradie je celé vysvetlenie klasickej správy “funguje z môjho shellu” a je aj dôvodom, prečo ten istý skript môže prejsť na jednom stroji a zlyhať na inom s pomalšou fázou trás. Ani jeden z výsledkov nič nehovorí o kvalite skriptu.

DNS a pripravenosť aplikácie prichádzajú ešte neskôr. Dokonca ani nainštalované trasy nie sú dôkazom, že vzdialený koncový bod počúva, že sa názov prekladá alebo že existuje desktopová relácia pre úlohu v používateľskom rozsahu.

Čo hák skutočne dedí

Hák sa spúšťa pod účtom a v prostredí procesu OpenVPN, čo nie je to isté ako váš interaktívny shell. Môže mu chýbať zbernica relácie používateľa, desktopové prostredie alebo poverenie, ktoré sa odomyká len pri prihlásení. Zapíšte, čo z toho úloha skutočne potrebuje.

To je dôležité pre úlohy, ktoré vyzerajú ako sieťové, ale závisia od používateľského kontextu: pripojenie zdieľaného priečinka s používateľským poverením, nastavenie proxy pre používateľa alebo konfigurácia tlačiarne. Privilegovaný tunelový hák je pre ne nesprávne miesto a žiadne čakanie neopraví chýbajúcu reláciu.

Keď úloha v háku zlyhá, zaznamenajte účet, prostredie a prvú operáciu, ktorá zlyhala. To oddeľuje predčasné časovanie od problému s povoleniami alebo kontextom a tieto dve majú úplne odlišné opravy. Hádanie medzi nimi je spôsob, akým sa päťminútová oprava stane celým popoludním.

Prečo pridanie spánku nie je kontrola pripravenosti

Spánok oneskorí skript a posunie okno preteku. V rýchly deň úloha uspeje; v pomalý deň znova zlyhá a zlyhanie sa ťažšie reprodukuje, pretože oneskorenie vyzerá, že funguje. Oneskorenie, ktoré funguje len pri ľahkej záťaži, je náhoda, nie oprava.

Ak je závislosťou trasa, použite hák, ktorý zodpovedá inštalácii trás. Ak je závislosťou služba za tunelom, použite obmedzenú kontrolu, ktorá čaká na tú konkrétnu podmienku a jasne zlyhá, keď nikdy nepríde.

Udržujte zlyhanie explicitné. Hák, ktorý skončí s nulou, hoci jeho skutočná práca zlyhala, je horší ako hák, ktorý zlyhá, pretože správca služieb zaznamená úspech a nikto sa už nepozerá. Jeden riadok logu zo samotného skriptu je najlacnejší spôsob, ako to udržať poctivé.

Čistenie a opätovné pripojenie si zaslúžia rovnakú starostlivosť

Skript, ktorý mení zdieľaný stav, potrebuje zodpovedajúcu cestu na vrátenie. Trasy, záznamy resolvera a značky firewallu pridané hákom by mali byť idempotentné a vratné, inak opätovné pripojenie naloží druhú kópiu na prvú.

Opätovné pripojenia môžu spúšťať háky častejšie ako úplný štart služby. Trvalé rozhranie, ktoré znovu vytvára reláciu, môže znova vyvolať cyklus up a route-up, takže skript, ktorý predpokladá jedno spustenie na boot, sa nakoniec začne správať nesprávne. Spočítajte spustenia v logu počas dňa blikania, aby ste videli, ako často sa naozaj spúšťa. Potom urobte skript bezpečným na toľko spustení.

Testujte životný cyklus, ktorý zlyhal, nie neskorší príkaz. Reprodukujte boot alebo opätovné pripojenie, sledujte spúšťanie háku a potvrďte, že úloha uspela v momente, keď sa skutočne spúšťa. Úspech z interaktívneho shellu potom je dôkazom o závislosti, nie dôkazom, že štartovacia cesta funguje.

Pomenujte udalosť, od ktorej závisí každá úloha, a potom úlohu priraďte k tejto udalosti. Všetko ostatné je oneskorenie, ktoré sa vydáva za kontrolu.

Súvisiace články