Den same kommandoen koplar til frå eit skal og døyr under cron, så den naturlege konklusjonen er at tunnelen eller sertifikatet er skuld i det. Sjå på kva dei to køyringane har til felles før du trur på det: binæren, konfigurasjonen og påloggingsinformasjonen er identiske, og berre prosessmiljøet er endra. Når programmet ikkje ein gong blir funne, hjelper ingen mengd TLS-feilsøking. Rettinga ligg vanlegvis i ein sti, ei arbeidsmappe og ei handfull miljøvariablar, ikkje i VPN-en.

command -v openvpn i skalet som verkar skriv ut svaret, og det er svært ofte /usr/sbin/openvpn, ei mappe som cron ikkje set på søkjestien sin.

Tunnelen starta aldri, så tunnelen er ikkje problemet

Jobbar som cron startar, arvar eit minimalt miljø, vanlegvis PATH=/usr/bin:/bin, og ingen kontrollerande terminal. Alt som er installert i /usr/sbin eller /usr/local/sbin manglar rett og slett på den lista, og logglinja seier openvpn: not found i staden for ein TLS-feil. Pythons subprocess feilar annleis: det arvar miljøet til tolkeprosessen, som kan vere rikare enn cron sitt, men framleis ikkje har noko skal til å utvide ein tilde. Båe feila skjer før ein einaste pakke forlèt verten.

Ein rask måte å skilje dei på er å lese den første feilen i staden for den siste. Ein manglande binær gjev eit skal- eller Python-unntak, ein dårleg konfigurasjon gjev ei OpenVPN-bruksmelding, og ein ekte handtrykkfeil gjev tidsstempel og peer-adresser. Berre den tredje er eit tunnelproblem.

Absolutte stiar og argumentlister slår skalstrengar

Send den oppløyste stien eksplisitt og hopp over skalet heilt. subprocess.run(["/usr/sbin/openvpn", "--config", config, "--verb", "4"], capture_output=True, text=True, timeout=90) gjev deg returkode, stdout og stderr utan å be eit skal tolke eit filnamn. Bygg konfigurasjonsstien frå os.environ["HOME"] eller pathlib.Path.home(), slik at ein tilde aldri må utvidast. Når du verkeleg treng skal-syntaks, bruk shlex.split, fordi å dele ein streng med .split() bryt på kvar einaste sti som inneheld eit mellomrom. Les også stderr, sidan OpenVPN skriv dei fleste av dei tidlege feila sine der.

Den same regelen gjeld cron: jobblinja er ikkje eit innloggingsskal, så ingenting lastar profilen din, og ingenting definerer aliasa dine.

Kva ein crontab faktisk arvar

Ei crontab-oppføring får miljøet crontab-en erklærer, pluss nokre få arva standardverdiar, så skriv ut stien eller pakk kallet inn i eit skript som gjer det. Ei linje som PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin øvst i fila dekkjer dei vanlege installasjonsstadene, og omdirigering med >> cron.log 2>&1 er det som gjer den neste feilen lesbar. Ein passfrasebeskytta profil har ingen måte å be om hemmelegheita si under cron, sidan det ikkje finst nokon terminal å spørje på. Ei slik tilkopling høyrer heime i ei systemd-eining som kan lese ei påloggingsfil, ikkje i ein jobb som latar som han er interaktiv.

Relative stiar er den andre fella. Ei testkøyring skjer ofte frå mappa som inneheld profilen, og ein cron-jobb startar heilt andre stader, så --config office.ovpn peikar på ei fil som ikkje er der, og meldinga blir lesen som ei manglande fil snarare enn ein manglande tunnel.

Bevis det ved å skrelle av miljøet

Gjenskap det minimale miljøet direkte: env -i PATH=/usr/bin:/bin /usr/sbin/openvpn --config office.ovpn --verb 4. Ei klage på sti eller terminal frå den køyringa tyder på at problemet sit over VPN-en. Viss han koplar til, er dei attverande mistenkte kontoen han køyrer som, mappa han startar i, og påloggingsinformasjonen han legg fram. Båe resultata er betre enn endå ein runde med sertifikatkontroll.

Gjer deretter innpakkinga sjølvrapporterande. Avslutt med ein eigen status for kvart trinn han nådde, logg båe straumane med tidsstempel, og den neste feilen fortel deg om han døydde ved stioppslag, ved autentisering eller etter at tunnelen alt var oppe.

Ei eining treng også riktig rekkjefølgje: Wants=network-online.target pluss After=network-online.target hindrar klienten i å starte før ei adresse eller ei standardrute finst, noko som elles viser seg som sertifikat- eller TLS-feil som forsvinn ved ein manuell omstart.

Relaterte artiklar