Skript up se spustí, skončí s nulou a úloha v něm nedokáže dosáhnout soukromé služby, která o dvě sekundy později z terminálu bezchybně funguje. Instinkt ukazuje na časování a obvyklá oprava je čekání, které závod skrývá, aniž by mu rozumělo. Užitečnější čtení je, že „up“ je název háčku, ne záruka připravenosti. Spustí se, když je tunelové zařízení nakonfigurováno, což je dříve než trasy, DNS a rozhodně dříve než jakákoli aplikace za tunelem.

Test v shellu uspěl, protože se spustil poté, co se vše usadilo. Háček se spustil v jeden konkrétní okamžik.

Kde up stojí v pořadí spouštění

OpenVPN nakonfiguruje tunelové zařízení a poté spustí háček up. Instalace tras je pozdější fáze a má vlastní háček, a proto úloha závislá na trase umístěná v up může vidět zařízení bez užitečné cesty. Umístěte práci s trasami do route-up a problém s časováním obvykle zmizí.

Manuál dokumentuje toto pořadí i prostředí, které každý háček dostává. Toto pořadí je celé vysvětlení klasického hlášení „funguje to z mého shellu“ a je také důvodem, proč stejný skript může projít na jednom stroji a selhat na jiném s pomalejší fází tras. Ani jeden z výsledků nic neříká o kvalitě skriptu.

Připravenost DNS a aplikací přichází ještě později. Ani nainstalované trasy nejsou důkazem, že vzdálený konec naslouchá, že se jméno překládá nebo že pro úlohu vázanou na uživatele existuje relace pracovní plochy.

Co háček skutečně dědí

Háček běží pod účtem a v prostředí procesu OpenVPN, což není totéž jako váš interaktivní shell. Může mu chybět uživatelská sběrnice relace, prostředí pracovní plochy nebo přihlašovací údaj, který se odemyká až při přihlášení. Zapište si, které z toho úloha skutečně potřebuje.

To je důležité pro úlohy, které vypadají síťově, ale závisí na uživatelském kontextu: připojení sdílené složky s uživatelským přihlašovacím údajem, nastavení proxy pro jednotlivého uživatele nebo konfigurace tiskárny. Privilegovaný tunelový háček je pro ně špatné místo a žádné čekání neopraví chybějící relaci.

Když úloha v háčku selže, zaznamenejte účet, prostředí a první operaci, která selhala. To odděluje předčasné časování od problému s oprávněními nebo kontextem a oba mají zcela odlišné opravy. Hádání mezi nimi je způsob, jak se z pětiminutové opravy stane celé odpoledne.

Proč přidání čekání není kontrola připravenosti

Čekání zpožďuje skript a posouvá okno závodu. V rychlý den úloha uspěje; v pomalý den znovu selže a selhání se hůře reprodukuje, protože zpoždění vypadá, že funguje. Zpoždění, které funguje jen při lehkém zatížení, je náhoda, ne oprava.

Pokud je závislostí trasa, použijte háček odpovídající instalaci trasy. Pokud je závislostí služba za tunelem, použijte omezenou kontrolu, která čeká na přesně tuto podmínku a jasně selže, když nikdy nenastane.

Udržujte selhání explicitní. Háček, který skončí s nulou, zatímco jeho skutečná práce selhala, je horší než háček, který selže, protože správce služeb zaznamená úspěch a nikdo se už nepodívá. Řádek záznamu ze samotného skriptu je nejlevnější způsob, jak to udržet poctivé.

Úklid a opětovné připojení si zaslouží stejnou péči

Skript, který mění sdílený stav, potřebuje odpovídající cestu k vrácení. Trasy, položky překladače a značky firewallu přidané háčkem musí být idempotentní a vratné, jinak opětovné připojení navrství druhou kopii na první.

Opětovná připojení mohou také spouštět háčky častěji než plné spuštění služby. Trvalé rozhraní, které znovu naváže relaci, může znovu vyvolat cyklus up a route-up, takže skript, který předpokládá jedno provedení na každé spuštění, nakonec začne selhávat. Spočítejte provedení v záznamu během dne blikání, abyste viděli, jak často se skutečně spouští. Poté zajistěte, aby skript byl bezpečný pro tolik spuštění.

Testujte životní cyklus, který selhal, ne pozdější příkaz. Reprodukujte spuštění nebo opětovné připojení, sledujte provedení háčku a potvrďte, že úloha uspěla v okamžiku, kdy se skutečně spouští. Úspěch z interaktivního shellu poté je důkazem o závislosti, ne důkazem, že cesta spouštění funguje.

Pojmenujte událost, na které každá úloha závisí, a poté ji k této události připojte. Všechno ostatní je zpoždění, které předstírá, že je kontrola.

Související články