PID-bestân oanwêzich, gjin tunnel: hat OpenVPN ea draaid?
In oerbliuwend PID-bestân seit neat oer oft in tunnel aktyf is. Kontrolearje de tsjinst, de starttiid fan it proses en it kontrakt fan de starter foardat jo it wiskje.
As de starter wegeret OpenVPN te starten omdat der al in PID-bestân bestiet, is de natuerlike lêzing dat der earne in tunnel draait. Dy lêzing is faak genôch ferkeard om it te kontrolearjen foardat der eat wiske wurdt. In bestân yn in runtime-map is boekhâlding, en boekhâlding oerlibbet crashes, werstarts en ûnderbrutsen stops dy't gjin proses efterlieten. Twa fragen beslisse de saak: is der in libjend proses, en heart dat proses by dizze eksimplaar.
Begjin by de tsjinst, net by it bestân
De wegering komt meast fan in starter en net fan OpenVPN sels. Hy lêst in paad, fynt dêr eat en stoppet foardat in konfiguraasje ferwurke wurdt. De earste fraach giet dus oer it kontrakt fan de starter, net oer de tunnel.
Lês de unit of it skript dat de melding printe en notearje trije dingen: it paad dat it kontrolearret, it tsjinsttype dat it ferklearret, en oft it hielendal ferantwurdlik is foar it skriuwen fan it bestân. In moderne unit kin ienfâldich of notify-tafersjoch brûke en nea in PID-bestân oanreitsje, wylst in âlder init-skript sels ien meitsje kin. In kontrôle fan it iene model nei it oare kopiearje jout krekt dit soarte wegering. Fyn út hokker model brûkt wurdt foardat jo eat ynterpretearje.
Pas dan wurdt de fraach oft in eksimplaar echt draait.
Kontrolearje oft dy identifier by jo eksimplaar heart
In getal yn in bestân bewiist dat in getal skreaun is. It bewiist net dat in proses mei dy identifier no bestiet, en it bewiist wis net dat it proses fan jo is, want identifiers wurde nei in werstart opnij brûkt.
Fergelykje de starttiid fan it proses mei de tiidstimpel fan it bestân, it útfierbere bestân mei it kommando fan de unit, en it tsjinstlidmaatskip mei de namme fan de unit. In mismach yn ien fan de trije betsjut dat jo nei boekhâlding sjogge en net nei in tunnel.
Op in host dy't konteners of ferskate nammeromten draait, kin in identifier yn ien werjefte sinfol wêze en yn in oare ûntbrekke. It net sjen fan in proses is ek gjin bewiis dat it net bestiet, as jo akkount it net besjen kin. Kontrolearje út de kontekst dy't de starter brûkt foardat jo konklúzjes lûke.
systemctl status [email protected]
ps -o pid,lstart,args -p "$(cat /run/openvpn/vpn.pid)"Wat de starter tasein hie mei it bestân te dwaan
PIDFile= fertelt de tsjinstbehearder wêr't er de identifier fan it haadproses lêze moat. De behearder skriuwt dat bestân net, mar hy ferwideret in oerlibjend ien nei it stopjen, en dêrom kin in ûnderbrutsen ôfsluting in bestân efterlitte.
Dy ferdieling fan ferantwurdlikheid ferklearret twa symptomen dy't minsken as bugs melde. In bestân dat nea ferskynt betsjut dat de daemon of syn skript it net skriuwe koe, net dat it tafersjoch ferkeard ynsteld is. In bestân dat in stop oerlibbet betsjut dat it ôfslutingspaad nea foltôge is.
It ferklearret ek wêrom't aktuele rjochtlinen foarstelle de konvinsje te mijen as tafersjoch it haadproses direkt folgje kin. Dy rjochtlinen binne gjin tastimming om it type fan in ferpakt unit te feroarjen, want it foargrûn-, fork- of notifikaasjegedrach fan de daemon moat oerienkomme mei wat de unit ferklearret. Feroarje it type sûnder de daemon te feroarjen en jo krije in unit dy't mislearring meldt wylst de tunnel draait, of it omkearde. Meitsje it pear byinoar, of lit beide. De systemd-tsjinstreferinsje beskriuwt de ferdieling fan eigendom.
Skjin stopjen tsjin oer ûnderbrutsen ôfsluting
In skjinne stop freget de daemon om ôf te sluten, wachtet op him en lit de behearder syn eigen boekhâlding opromje. In ûnderbrutsen ôfsluting, in deade proses of in werstart midden yn it stopjen slacht dielen fan dy folchoarder oer, en it bestân is wat oerbliuwt. Ien fine nei in crash fertelt jo dat it stopjen net ôfmakke is, net dat der eat harket.
Fergelykje de tiidstimpel fan it bestân mei de lêste opstart en mei de lêste stop fan de unit.
Kontrolearje dan de libjende bewiisstikken direkt. In socket bûn oan de VPN-poart en in tunnelinterface mei in adres binne bewiis dat der eat draait, op in manier dy't in tekstbestân yn in runtime-map nea is. As beide ûntbrekke, draait der neat, wat it bestân ek beweart.
Hâld op mei it bestân as gewoante te wiskjen
It wiskje is in legitime herstap as jo fêststeld hawwe dat gjin eksimplaar it besit en dat de starter dit gedrach dokumintearret.
As permaninte gewoante foar it starten hinne ferslacht it de kontrôle dy't jo omrinne. As ferâldere bestannen nei elke skjinne stop weromkomme, binne de skriuwer en de ôfslutingslibbenssyklus it net iens oer wa't it paad besit, en dy ûniens is de bug dy't it wurdich is om te reparearjen.
Hâld in ûnôfhinklike wei nei de host, start ien eksimplaar fia syn normale behearder en lês it earste resultaat. De folgjende persoan krijt in unit dy't ofwol wurket of himsels ferklearret.