Keď spúšťač odmietne spustiť OpenVPN, pretože súbor PID už existuje, prirodzené čítanie je, že niekde beží tunel. Také čítanie je dosť často chybné na to, aby sa pred zmazaním čohokoľvek oplatilo overiť. Súbor v behovom adresári je účtovníctvo a účtovníctvo prežíva pády, reštarty a prerušené vypnutia, po ktorých nezostal žiadny proces. Prípad rozhodujú dve otázky: existuje živý proces a patrí ten proces tejto inštancii.

Začnite službou, nie súborom

Odmietnutie zvyčajne prichádza od spúšťača, nie od samotného OpenVPN. Prečíta cestu, nájde tam niečo a zastaví sa skôr, než sa analyzuje konfigurácia. Prvá otázka sa teda týka zmluvy spúšťača, nie tunela.

Prečítajte si unit alebo skript, ktorý správu vypísal, a všimnite si tri veci: cestu, ktorú kontroluje, typ služby, ktorý deklaruje, a či vôbec zodpovedá za zápis súboru. Moderný unit môže používať jednoduchý alebo notify dohľad a súboru PID sa nikdy nedotknúť, kým starší init skript si ho môže vytvoriť sám. Kopírovanie kontroly z jedného modelu do druhého vytvára presne tento druh odmietnutia. Zistite, ktorý model sa používa, skôr než čokoľvek vyložíte.

Až potom sa otázka zmení na to, či inštancia skutočne beží.

Overte, či tento identifikátor patrí vašej inštancii

Číslo v súbore dokazuje, že bolo zapísané číslo. Nedokazuje, že proces s týmto identifikátorom existuje práve teraz, a rozhodne nedokazuje, že proces je váš, pretože identifikátory sa po reštarte znova používajú.

Porovnajte čas spustenia procesu s časovou pečiatkou súboru, spustiteľný súbor s príkazom unitu a členstvo v službe s názvom unitu. Nezhoda v ktoromkoľvek z troch znamená, že sa pozeráte na účtovníctvo, nie na tunel.

Na hostiteľovi s kontajnermi alebo viacerými mennými priestormi môže mať identifikátor zmysel v jednom pohľade a v inom chýbať. To, že proces nevidíte, tiež nie je dôkazom, že neexistuje, ak ho váš účet nemôže preskúmať. Overujte z kontextu, ktorý spúšťač používa, skôr než vyvodíte závery.

systemctl status [email protected]
ps -o pid,lstart,args -p "$(cat /run/openvpn/vpn.pid)"

Čo spúšťač sľúbil so súborom urobiť

PIDFile= hovorí správcovi služieb, odkiaľ má čítať identifikátor hlavného procesu. Správca ten súbor nepíše, ale odstraňuje ten, ktorý po vypnutí zostal, a práve preto môže prerušený odchod zanechať súbor.

Toto rozdelenie zodpovednosti vysvetľuje dva príznaky, ktoré ľudia hlásia ako chyby. Súbor, ktorý sa nikdy neobjaví, znamená, že ho démon alebo jeho skript nedokázali zapísať, nie že dohľad je zle nastavený. Súbor, ktorý prežije zastavenie, znamená, že cesta vypnutia sa nikdy nedokončila.

Vysvetľuje to aj to, prečo súčasné pokyny odporúčajú vyhnúť sa tejto konvencii, keď dohľad dokáže sledovať hlavný proces priamo. Tie pokyny nie sú povolením meniť typ zabaleného unitu, pretože správanie démona v popredí, pri vetvení alebo pri notifikácii musí zodpovedať tomu, čo unit deklaruje. Zmeňte typ bez zmeny démona a dostanete unit, ktorý hlási zlyhanie, kým tunel beží, alebo naopak. Zlaďte dvojicu, alebo nechajte obe. Referenčná príručka služby systemd opisuje rozdelenie vlastníctva.

Čisté vypnutie verzus prerušený odchod

Čisté zastavenie požiada démona, aby skončil, počká naň a nechá správcu upratať jeho vlastné účtovníctvo. Prerušený odchod, zabitý proces alebo reštart uprostred vypínania preskočia časti tohto sledu a súbor je to, čo zostane. Nájdenie súboru po páde vám hovorí, že vypínanie nedobehlo, nie že niečo počúva.

Porovnajte časovú pečiatku súboru s posledným štartom a s posledným zastavením unitu.

Potom skontrolujte živé dôkazy priamo. Socket naviazaný na port VPN a tunelové rozhranie s adresou sú dôkazom, že niečo beží, spôsobom, akým textový súbor v behovom adresári nikdy nie je. Ak chýba oboje, nič nebeží, nech súbor tvrdí čokoľvek.

Prestaňte súbor mazať zo zvyku

Zmazanie je legitímny krok obnovy po tom, čo ste zistili, že ho žiadna inštancia nevlastní a že spúšťač toto správanie dokumentuje.

Ako trvalý zvyk pred štartom to marí kontrolu, ktorú obchádzate. Ak sa zastarané súbory vracajú po každom čistom zastavení, zapisovateľ a životný cyklus vypínania sa nezhodujú na tom, kto cestu vlastní, a tá nezhoda je chyba, ktorú stojí za to opraviť.

Udržujte si nezávislú cestu do hostiteľa, spustite jednu inštanciu jej bežným správcom a prečítajte prvý výsledok. Ďalší človek dostane unit, ktorý buď funguje, alebo sa vysvetlí.

Súvisiace články