PID-bestand aanwezig, geen tunnel: heeft OpenVPN ooit gedraaid?
Een achtergebleven PID-bestand zegt niets over of een tunnel actief is. Controleer de dienst, de starttijd van het proces en het contract van de starter voordat u het verwijdert.
Wanneer de starter weigert OpenVPN te starten omdat er al een PID-bestand bestaat, is de natuurlijke lezing dat er ergens een tunnel draait. Die lezing is vaak genoeg onjuist om te controleren voordat er iets wordt verwijderd. Een bestand in een runtimemap is boekhouding, en boekhouding overleeft crashes, herstarts en onderbroken afsluitingen die geen proces achterlieten. Twee vragen beslissen de zaak: is er een levend proces, en hoort dat proces bij deze instantie.
Begin bij de dienst, niet bij het bestand
De weigering komt meestal van een starter en niet van OpenVPN zelf. Hij leest een pad, vindt daar iets en stopt voordat een configuratie wordt geparseerd. De eerste vraag gaat dus over het contract van de starter, niet over de tunnel.
Lees de unit of het script dat de melding afdrukte en noteer drie dingen: het pad dat het controleert, het diensttype dat het aangeeft, en of het überhaupt verantwoordelijk is voor het schrijven van het bestand. Een moderne unit kan eenvoudige of notify-supervisie gebruiken en een PID-bestand nooit aanraken, terwijl een ouder initscript er zelf een kan maken. Een controle van het ene model naar het andere kopiëren levert precies dit soort weigering op. Zoek uit welk model wordt gebruikt voordat u iets interpreteert.
Pas dan wordt de vraag of er werkelijk een instantie draait.
Controleer of die identificatie bij uw instantie hoort
Een getal in een bestand bewijst dat er een getal is geschreven. Het bewijst niet dat een proces met die identificatie nu bestaat, en zeker niet dat het proces het uwe is, want identificaties worden na een herstart hergebruikt.
Vergelijk de starttijd van het proces met de tijdstempel van het bestand, het uitvoerbare bestand met de opdracht van de unit en het dienstlidmaatschap met de naam van de unit. Een afwijking in een van de drie betekent dat u boekhouding ziet en geen tunnel.
Op een host met containers of meerdere naamruimten kan een identificatie in de ene weergave betekenisvol zijn en in een andere ontbreken. Een proces niet zien is ook geen bewijs dat het niet bestaat, als uw account het niet kan inspecteren. Controleer vanuit de context die de starter gebruikt voordat u conclusies trekt.
systemctl status [email protected]
ps -o pid,lstart,args -p "$(cat /run/openvpn/vpn.pid)"Wat de starter beloofde met het bestand te doen
PIDFile= vertelt de dienstbeheerder waar de identificatie van het hoofdproces gelezen moet worden. De beheerder schrijft dat bestand niet, maar verwijdert wel een overgeblevene na het afsluiten, en precies daarom kan een onderbroken afsluiting een bestand achterlaten.
Die taakverdeling verklaart twee symptomen die mensen als fouten melden. Een bestand dat nooit verschijnt, betekent dat de daemon of zijn script het niet heeft kunnen schrijven, niet dat de supervisie verkeerd is geconfigureerd. Een bestand dat een stop overleeft, betekent dat het afsluitpad nooit is voltooid.
Het verklaart ook waarom actuele richtlijnen aanraden de conventie te vermijden wanneer supervisie het hoofdproces rechtstreeks kan volgen. Die richtlijnen zijn geen toestemming om het type van een verpakte unit te wijzigen, want het gedrag van de daemon op de voorgrond, bij fork of bij notificatie moet overeenkomen met wat de unit aangeeft. Wijzig het type zonder de daemon te wijzigen en u krijgt een unit die een fout meldt terwijl de tunnel draait, of het omgekeerde. Laat het paar kloppen, of laat beide staan. De systemd-dienstreferentie beschrijft de eigendomsverdeling.
Schone afsluiting tegenover onderbroken afsluiting
Een schone stop vraagt de daemon af te sluiten, wacht op hem en laat de beheerder zijn eigen boekhouding opruimen. Een onderbroken afsluiting, een gedood proces of een herstart midden in het afsluiten slaat delen van die volgorde over, en het bestand is wat overblijft. Er een vinden na een crash zegt u dat het afsluiten niet is voltooid, niet dat er iets luistert.
Vergelijk de tijdstempel van het bestand met de laatste opstart en met de laatste stop van de unit.
Controleer daarna de levende bewijzen rechtstreeks. Een socket gebonden aan de VPN-poort en een tunnelinterface met een adres zijn bewijs dat er iets draait, op een manier waarop een tekstbestand in een runtimemap dat nooit is. Ontbreken beide, dan draait er niets, wat het bestand ook beweert.
Stop met het bestand uit gewoonte te verwijderen
Het verwijderen is een legitieme herstelstap zodra u hebt vastgesteld dat geen instantie het bezit en dat de starter dit gedrag documenteert.
Als blijvende gewoonte voor het starten ondermijnt het de controle die u omzeilt. Als verouderde bestanden na elke schone stop terugkomen, zijn de schrijver en de afsluitlevenscyclus het oneens over wie het pad bezit, en die onenigheid is de fout die het waard is om te verhelpen.
Houd een onafhankelijke weg naar de host, start één instantie via de normale beheerder en lees het eerste resultaat. De volgende persoon krijgt een unit die ofwel werkt ofwel zichzelf uitlegt.