Déiselwecht Kommando verbënnt aus enger Shell a stierft ënner cron, also ass d’natierlech Konklusioun, datt den Tunnel oder den Zertifikat schold ass. Kuckt, wat déi zwou Lafen gemeinsam hunn, ier Dir dat gleeft: d’Binär, d’Konfiguratioun an d’Zougangsdaten sinn identesch, an nëmmen d’Ëmwelt vum Prozess huet sech geännert. Wann d’Programm net emol fonnt gëtt, hëlleft keng Quantitéit TLS-Debuggen. D’Korrektur läit meeschtens an engem Pad, engem Aarbechtsverzeechnes an enger Handvoll Ëmweltvariabelen, net am VPN.

command -v openvpn an der Shell, déi funktionéiert, dréckt d’Äntwert, an et ass ganz dacks /usr/sbin/openvpn, en Verzeechnes, deen cron net op säi Sichpad setzt.

Den Tunnel ass ni ugaang, also ass den Tunnel net de Problem

Aarbechten, déi cron start, ierwen eng minimal Ëmwelt, konventionell PATH=/usr/bin:/bin, an keen Terminal fir ze steieren. Alles, wat an /usr/sbin oder /usr/local/sbin installéiert ass, feelt einfach an där Lëscht, an d’Loglinn liest openvpn: not found amplaz vun engem TLS-Fehler. Dem Python säin subprocess schléit anescht fehl: et ierft d’Ëmwelt vum Interpretersprozess, déi méi räich wéi déi vum cron ka sinn, awer nach ëmmer keng Shell huet, fir eng Tilde auszebauen. Béid Feeler geschéien, ier een eenzegen Paket den Host verléisst.

En séiere Wee fir se z’ënnerscheeden ass den éischte Feeler ze liesen amplaz den leschten. Eng fehlend Binär gëtt eng Shell- oder Python-Ausnam, eng schlecht Konfiguratioun gëtt eng OpenVPN-Benotzungsmessage, an en echte Handshake-Fehler gëtt Zäitstempel an Adressen vun de Peeren. Nëmmen déi drëtt ass en Tunnelproblem.

Absolut Pade an Argumentlëschte schloen Shell-Strings

Gitt de geléiste Pad explizit a spréngt d’Shell ganz. subprocess.run(["/usr/sbin/openvpn", "--config", config, "--verb", "4"], capture_output=True, text=True, timeout=90) gëtt Iech e Retourcode, stdout an stderr, ouni eng Shell ze froen, en Dateinumm z’interpretéieren. Baut de Konfiguratiounspad aus os.environ["HOME"] oder pathlib.Path.home(), sou datt eng Tilde ni muss ausgebaut ginn. Wann Dir wierklech Shell-Syntax braucht, benotzt shlex.split, well eng Zeecheketten mat .split() ze splécken op all Pad mat engem Espace brécht. Liest och stderr, well OpenVPN déi meescht vu senge fréie Feeler dohi schreift.

Déiselwecht Regel gëllt fir cron: d’Aarbechtslinn ass keng Login-Shell, also luede näischt Äre Profil a definéiert näischt Är Aliassen.

Wat en crontab tatsächlech ierft

En crontab-Antrag kritt déi Ëmwelt, déi den crontab deklaréiert, plus e puer geierft Standardwäerter, also schreift de Pad aus oder wéckelt den Opruff an e Skript, dat et mécht. Eng Linn wéi PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin uewen an der Datei deckt déi üblech Installatiounsplazen of, an d’Ëmleede mat >> cron.log 2>&1 ass et, wat den nächsten Feeler liesbar mécht. En duerch eng Passphrase geschützte Profil huet ënner cron keng Méiglechkeet, säi Geheimnis ze froen, well keen Terminal do ass, fir ze froen. Sou eng Verbindung gehéiert an eng systemd-Eenheet, déi eng Zougangsdaten-Datei liese kann, net an eng Aarbecht, déi sech als interaktiv ausgëtt.

Relativ Pade sinn déi zweet Fal. En Testlaf geschitt dacks aus dem Dossier, wou de Profil dran ass, an eng cron-Aarbecht fänkt ganz soss un, also léist --config office.ovpn sech op eng Datei, déi net do ass, an d’Message liest sech als eng fehlend Datei amplaz vun engem fehlenden Tunnel.

Beweist et, andeem Dir d’Ëmwelt ofzitt

Reproduzéiert déi minimal Ëmwelt direkt: env -i PATH=/usr/bin:/bin /usr/sbin/openvpn --config office.ovpn --verb 4. Eng Plainte iwwer Pad oder Terminal aus deem Laf heescht, de Problem sëtzt iwwer dem VPN. Wann et verbënnt, sinn déi reschtlech Verdächtegt de Kont, ënner deem et leeft, den Verzeechnes, an deem et ufänkt, an d’Zougangsdaten, déi et presentéiert. Jiddwer vun deenen zwee Resultater ass besser wéi nach eng Ronn Zertifikatspréifung.

Dann maacht de Wrapper selbstrapportéierend. Gitt mat engem eegene Status eraus fir all Etapp, déi et erreecht huet, loggt béid Stréim mat engem Zäitstempel, an de nächsten Feeler seet Iech, ob et bei der Padopléisung, bei der Authentifikatioun oder nodeems den Tunnel scho stoungen ass, gestuerwen ass.

Eng Eenheet brauch och déi richteg Reihenfolg: Wants=network-online.target plus After=network-online.target hale de Client dovun of, unzefänken, ier eng Adress oder eng Standardroute existéiert, wat sech soss als Zertifikats- oder TLS-Feeler weist, déi bei engem manuellen Neistart verschwannen.

Ähnlech Artikelen