Прекъснете един профил на OpenVPN GUI, а не всеки тунел
Тунел, управляван от GUI, изисква GUI команда, а тунел, управляван от услуга — управление на услугата. Определете коя програма притежава профила, преди да пишете скрипт.
Скриптът за прекъсване обикновено се проваля по една причина: обръща се към грешния собственик. Тунел, управляван от общностния OpenVPN GUI, принадлежи на сесията на този GUI, тунел, стартиран от услуга на Windows, принадлежи на услугата, а OpenVPN Connect не принадлежи на нито един от двамата. Преминете през тези проверки по ред и спрете, когато собственикът е неясен. Изпращането на kill команда, защото собственикът е бил двусмислен, е начинът, по който прекъсването на един профил се превръща в срив на целия обект.
За връзка, управлявана от GUI, полезната команда е съобщение към GUI, а не сигнал към openvpn.exe.
Първо определете собственика
Вижте коя програма действително показва свързаното състояние, преди да пишете каквото и да е. Икона в системната област означава, че сесията на GUI го притежава. Запис за услуга означава, че услугата го притежава. Отделен прозорец на приложение със собствен списък с профили означава нито едно от двете и за него важи собственият му интерфейс, специфичен за версията.
Проверете също акаунта и сесията на работния плот. Планирана задача, изпълнявана като друг потребител или в неинтерактивна сесия, не бива да се приема за управляваща GUI, който влязъл човек вижда. Това несъответствие дава команда, която завършва чисто и не променя нищо, а това е най-скъпият вид повреда за отстраняване по дневник.
След това изпратете собственото прекъсване на собственика
Когато GUI е инсталиран на пътя от примера и има профил на име office, цялата команда е един ред:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect officeЗаменете с реалния си път на инсталация и точното име на конфигурацията, включително регистъра, както го показва GUI. Документацията за командите на проекта изброява поддържаните GUI управления и този пример принадлежи само на OpenVPN GUI — това не е команда за всяко приложение с OpenVPN в името си.
За тунел, притежаван от услуга, правилното управление е услугата, а не изпълнимият файл на GUI. Прегледайте инсталираната услуга и профилите, които тя управлява, преди да спирате каквото и да е, защото спиране може да свали няколко тунела наведнъж, а няма да получите резултат по отделен профил.
Проверете дали нищо друго не пада
GUI документира също команда disconnect_all и обхватът ѝ е точно причината да е грешният инструмент за скрипт, който трябва да спре само office. Ако се изкушавате да я използвате за простота, попитайте какво друго на тази машина е свързано и как потребителят ще забележи.
taskkill /F /IM openvpn.exe е по-лош по два начина. Избира процеси по име на изпълним файл и налага принудително прекратяване, така че не изразява нито име на профил, нито нормалната последователност за прекъсване на собственика. Да наречеш това плавно спиране значи да скриеш и двата проблема зад един код на изход.
По който и път да поемете, проверете обхвата на въздействие преди промяната: избройте свързаните профили, отбележете кои трябва да оцелеят и ги проверете отново след това.
Потвърдете състоянието, а не кода на изход
След като поискате прекъсването, четете състоянието на посочената връзка през нейния собственик, вместо да се доверявате на върнатата стойност на командата. Ако следващата стъпка се нуждае от мрежата след разглобяването, изчакайте тази промяна на състоянието с явен таймаут, вместо да приемате, че почистването е приключило, щом процесът се върне. Скрипт, който надбягва разглобяването, ще се проваля на моменти и вината ще се стовари върху VPN.
Ако състоянието никога не се промени, собственикът вероятно не е този, към когото сте се обърнали. Проверете отново сесията и акаунта, преди да преминете към по-силна команда.
Какво да запишете в дневника
Записвайте името на профила, собственика, към когото сте се обърнали, контекста на стартиране и полученото състояние. Не изсипвайте цялата конфигурация или идентификационни данни в дневника на задачата и не записвайте командния ред, ако съдържа път до файл с тайни.
Съобщение за грешка, което посочва профила и контекста, е достатъчно, за да възпроизведе следващият човек проблема. Дневник, който записва само общ код на изход, ги връща в началото, а точно там започва отново догадката.