Skript pro odpojení obvykle selže z jednoho důvodu: obrací se na špatného vlastníka. Tunel spravovaný komunitním OpenVPN GUI patří sezení tohoto GUI, tunel spuštěný službou Windows patří službě a OpenVPN Connect nepatří ani jednomu z nich. Projděte tyto kontroly v pořadí a zastavte se, když je vlastník nejasný. Poslat příkaz kill proto, že vlastník byl nejednoznačný, je přesně to, jak se z odpojení jednoho profilu stane výpadek celého areálu.

U připojení spravovaného GUI je užitečným příkazem zpráva GUI, nikoli signál openvpn.exe.

Nejprve určete vlastníka

Než cokoli napíšete, podívejte se, který program skutečně zobrazuje stav připojení. Ikona v oznamovací oblasti znamená, že ho vlastní sezení GUI. Záznam služby znamená, že ho vlastní služba. Samostatné okno aplikace s vlastním seznamem profilů neznamená ani jedno a platí pro něj její vlastní rozhraní specifické pro verzi.

Zkontrolujte také účet a sezení na ploše. Naplánovanou úlohu běžící pod jiným uživatelem nebo v neinteraktivním sezení nelze považovat za správce GUI, které vidí přihlášený člověk. Tento nesoulad vytvoří příkaz, který skončí čistě a nic nezmění, což je nejdražší druh poruchy při hledání příčiny z logu.

Potom pošlete vlastní odpojení vlastníka

Když je GUI nainstalováno na cestě z příkladu a existuje profil s názvem office, celý příkaz je jeden řádek:

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect office

Nahraďte ji svou skutečnou instalační cestou a přesným názvem konfigurace včetně velikosti písmen, jak je zobrazuje GUI. Dokumentace příkazů projektu uvádí podporované ovládací prvky GUI a tento příklad patří výhradně OpenVPN GUI — není to příkaz pro každou aplikaci, která má v názvu OpenVPN.

U tunelu vlastněného službou je správným ovládáním služba, nikoli binárka GUI. Prohlédněte nainstalovanou službu a profily, které spravuje, než cokoli zastavíte, protože zastavení může shodit několik tunelů najednou a nedostanete výsledek po jednotlivých profilech.

Zkontrolujte, že nic jiného nespadne

GUI dokumentuje také příkaz disconnect_all a jeho rozsah je přesně důvodem, proč je to špatný nástroj pro skript, který má zastavit jen office. Pokud vás láká ho použít pro jednoduchost, zeptejte se, co dalšího je na tom stroji připojeno a jak si toho uživatel všimne.

taskkill /F /IM openvpn.exe je horší ve dvou ohledech. Vybírá procesy podle názvu spustitelného souboru a vynucuje ukončení, takže nevyjadřuje ani název profilu, ani obvyklý sled odpojení vlastníka. Nazývat to čistým vypnutím znamená schovat oba problémy za jediný návratový kód.

Ať zvolíte kteroukoli cestu, ověřte rozsah dopadu před změnou: vypište připojené profily, poznamenejte si, které mají přežít, a potom je znovu zkontrolujte.

Potvrďte stav, ne návratový kód

Po požadavku na odpojení čtěte stav pojmenovaného připojení přes jeho vlastníka, místo abyste věřili návratové hodnotě příkazu. Pokud další krok po rozebrání potřebuje síť, čekejte na tuto změnu stavu s explicitním časovým limitem, místo abyste předpokládali, že úklid skončil, když se proces vrátil. Skript, který předbíhá rozebrání, bude občas selhávat a vina padne na VPN.

Pokud se stav nikdy nezmění, vlastník pravděpodobně není ten, na kterého jste se obrátili. Znovu zkontrolujte sezení a účet, než přistoupíte k silnějšímu příkazu.

Co zapsat do logu

Zaznamenejte název profilu, vlastníka, na kterého jste se obrátili, kontext spuštění a výsledný stav. Nevysypávejte celou konfiguraci ani přihlašovací údaje do logu úlohy a nezapisujte příkazový řádek, pokud obsahuje cestu k souboru s tajemstvími.

Chybová zpráva, která jmenuje profil a kontext, stačí, aby další člověk problém reprodukoval. Log, který zaznamená jen obecný návratový kód, je pošle zpět na začátek, a právě tam začíná hádání znovu.

Související články