PID datoteka postoji, tunela nema: je li OpenVPN ikad radio?
Zaostala PID datoteka ništa ne govori o tome je li tunel aktivan. Provjerite servis, vrijeme pokretanja procesa i ugovor pokretača prije nego što je obrišete.
Kada pokretač odbije pokrenuti OpenVPN jer PID datoteka već postoji, prirodno čitanje je da negdje radi tunel. To čitanje je dovoljno često pogrešno da ga vrijedi provjeriti prije nego što se bilo šta obriše. Datoteka u radnom direktoriju je knjigovodstvo, a knjigovodstvo preživljava padove, restarte i prekinuta zaustavljanja koja nisu ostavila proces za sobom. Dva pitanja odlučuju slučaj: postoji li živ proces i pripada li taj proces ovoj instanci.
Počnite od servisa, ne od datoteke
Odbijanje obično dolazi od pokretača, a ne od samog OpenVPN-a. On čita putanju, nađe nešto tamo i zaustavi se prije nego što raščlani konfiguraciju. Prvo pitanje je zato o ugovoru pokretača, a ne o tunelu.
Pročitajte unit ili skriptu koja je ispisala poruku i obratite pažnju na tri stvari: putanju koju provjerava, tip servisa koji deklarira i je li uopće odgovoran za pisanje datoteke. Moderan unit može koristiti jednostavan ili notify nadzor i nikad ne dirati PID datoteku, dok starija init skripta može sama stvoriti jednu. Kopiranje provjere iz jednog modela u drugi proizvodi upravo ovakvo odbijanje. Otkrijte koji je model u upotrebi prije nego što bilo šta protumačite.
Tek tada pitanje postaje radi li neka instanca stvarno.
Provjerite pripada li taj identifikator vašoj instanci
Broj u datoteci dokazuje da je broj zapisan. Ne dokazuje da proces s tim identifikatorom sada postoji, a svakako ne dokazuje da je proces vaš, jer se identifikatori ponovno koriste nakon restarta.
Uporedite vrijeme pokretanja procesa s vremenskom oznakom datoteke, izvršnu datoteku s naredbom unita, a članstvo u servisu s imenom unita. Neslaganje u bilo kojem od tri znači da gledate u knjigovodstvo, a ne u tunel.
Na hostu koji pokreće kontejnere ili više imenskih prostora identifikator može imati smisla u jednom prikazu, a izostati u drugom. To što ne vidite proces nije dokaz da ne postoji, ako ga vaš račun ne može pregledati. Provjerite iz konteksta koji pokretač koristi prije nego što izvedete zaključke.
systemctl status [email protected]
ps -o pid,lstart,args -p "$(cat /run/openvpn/vpn.pid)"Šta je pokretač obećao učiniti s datotekom
PIDFile= govori menadžeru servisa odakle čitati identifikator glavnog procesa. Menadžer ne piše tu datoteku, ali uklanja preostalu nakon zaustavljanja, i upravo zato prekinuti izlaz može ostaviti datoteku.
Ta podjela odgovornosti objašnjava dva simptoma koja ljudi prijavljuju kao greške. Datoteka koja se nikad ne pojavi znači da je daemon ili njegova skripta nisu uspjeli da je zapišu, a ne da je nadzor pogrešno konfigurisan. Datoteka koja preživi zaustavljanje znači da putanja zaustavljanja nikad nije završena.
To takođe objašnjava zašto aktualne smjernice predlažu izbjegavanje konvencije kada nadzor može pratiti glavni proces izravno. Te smjernice nisu dopuštenje da se mijenja tip pakovanog unita, jer ponašanje daemona u prvom planu, pri račvanju ili pri obavijesti mora odgovarati onome što unit deklarira. Promijenite tip bez promjene daemona i dobit ćete unit koji prijavljuje neuspjeh dok tunel radi, ili obrnuto. Uparite par ili ostavite oboje. Referenca za systemd servis opisuje podjelu vlasništva.
Čisto zaustavljanje nasuprot prekinutom izlazu
Čisto zaustavljanje traži od daemona da izađe, čeka ga i dopušta menadžeru da pospremi svoje knjigovodstvo. Prekinuti izlaz, ubijeni proces ili restart usred zaustavljanja preskaču dijelove tog slijeda, a datoteka je ono što ostaje. Pronalaženje datoteke nakon pada govori da zaustavljanje nije završeno, a ne da nešto sluša.
Uporedite vremensku oznaku datoteke sa zadnjim podizanjem i sa zadnjim zaustavljanjem unita.
Zatim provjerite žive dokaze izravno. Socket vezan na VPN port i tunelsko sučelje s adresom dokaz su da nešto radi, na način na koji tekstualna datoteka u radnom direktoriju nikad nije. Ako oboje nedostaje, ništa ne radi, šta god datoteka tvrdila.
Prestanite brisati datoteku iz navike
Brisanje je legitiman korak oporavka nakon što utvrdite da je nijedna instanca ne posjeduje i da pokretač dokumentira ovo ponašanje.
Kao trajna navika prije pokretanja, ono poništava provjeru koju zaobilazite. Ako se zastarjele datoteke vraćaju nakon svakog čistog zaustavljanja, pisac i životni ciklus zaustavljanja ne slažu se oko toga ko posjeduje putanju, i to neslaganje je greška koju vrijedi popraviti.
Održavajte neovisan način ulaska u host, pokrenite jednu instancu kroz njezin normalni menadžer i pročitajte prvi rezultat. Sljedeća osoba dobija unit koji ili radi ili se objašnjava.