Mae’r un gorchymyn yn cysylltu o shell ac yn marw o dan cron, felly’r casgliad naturiol yw bod y twnnel neu’r dystysgrif ar fai. Edrychwch ar yr hyn sydd gan y ddau rediad yn gyffredin cyn credu hynny: mae’r deuaidd, y ffurfweddiad a’r cymwysterau yn unfath, a dim ond amgylchedd y broses a newidiodd. Pan na chaiff y rhaglen ei darganfod o gwbl, nid yw unrhyw faint o ddadfygio TLS yn helpu. Mae’r atgyweiriad fel arfer yn byw mewn llwybr, cyfeiriadur gwaith a dwrn o newidynnau amgylchedd, nid yn y VPN.

Mae command -v openvpn yn y shell sy’n gweithio yn argraffu’r ateb, ac yn aml iawn /usr/sbin/openvpn ydyw, cyfeiriadur nad yw cron yn ei roi ar ei lwybr chwilio.

Ni ddechreuodd y twnnel byth, felly nid y twnnel yw’r broblem

Mae tasgau a gychwynnir gan cron yn etifeddu amgylchedd bychan, fel arfer PATH=/usr/bin:/bin, ac nid oes ganddynt derfynell reoli. Mae unrhyw beth a osodwyd yn /usr/sbin neu /usr/local/sbin yn syml yn absennol o’r rhestr honno, ac mae’r llinell log yn dweud openvpn: not found yn lle gwall TLS. Mae subprocess Python yn methu’n wahanol: mae’n etifeddu amgylchedd proses y dehonglydd, a all fod yn gyfoethocach na rhyw cron, ond nid oes ganddo shell i ehangu tilde o hyd. Mae’r ddau fethiant yn digwydd cyn i unrhyw becyn adael y gwesteiwr.

Ffordd gyflym o’u gwahaniaethu yw darllen y gwall cyntaf yn lle’r olaf. Mae deuaidd ar goll yn cynhyrchu eithriad shell neu Python, mae ffurfweddiad gwael yn cynhyrchu neges defnyddiad OpenVPN, ac mae methiant ysgwyd llaw go iawn yn cynhyrchu stampiau amser ac anerchiadau cymar. Dim ond y trydydd yw problem twnnel.

Mae llwybrau absoliwt a rhestrau dadleuon yn curo llinynnau shell

Pasiwch y llwybr a ddatryswyd yn benodol a sgipiwch y shell yn gyfan gwbl. Mae subprocess.run(["/usr/sbin/openvpn", "--config", config, "--verb", "4"], capture_output=True, text=True, timeout=90) yn rhoi cod dychwelyd, stdout a stderr i chi heb ofyn i shell ddehongli enw ffeil. Adeiladwch lwybr y ffurfweddiad o os.environ["HOME"] neu pathlib.Path.home(), fel na fydd rhaid ehangu tilde byth. Pan fo gwir angen cystrawen shell arnoch, defnyddiwch shlex.split, oherwydd mae rhannu llinyn gyda .split() yn torri ar unrhyw lwybr sy’n cynnwys bwlch. Darllenwch stderr hefyd, gan fod OpenVPN yn ysgrifennu’r rhan fwyaf o’i fethiannau cynnar yno.

Mae’r un rheol yn berthnasol i cron: nid yw llinell y dasg yn shell mewngofnodi, felly nid oes dim yn llwytho eich proffil ac nid oes dim yn diffinio eich llysenwau.

Yr hyn y mae crontab yn ei etifeddu mewn gwirionedd

Mae cofnod crontab yn cael pa bynnag amgylchedd y mae’r crontab yn ei ddatgan ynghyd ag ychydig o ragosodiadau a etifeddwyd, felly sillafwch y llwybr yn llawn neu lapio’r alwad mewn sgript sy’n gwneud hynny. Mae llinell fel PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ar frig y ffeil yn gorchuddio’r lleoliadau gosod arferol, ac ailgyfeirio gyda >> cron.log 2>&1 sydd yn gwneud y methiant nesaf yn ddarllenadwy. Nid oes gan broffil a warchodir â chyfrinair unrhyw ffordd i ofyn am ei gyfrinach o dan cron, gan nad oes terfynell i ofyn arni. Mae cysylltiad o’r fath yn perthyn i uned systemd a all ddarllen ffeil gymhwyster, nid i dasg sy’n esgus bod yn ryngweithiol.

Llwybrau cymharol yw’r ail fagl. Mae prawf yn aml yn digwydd o’r ffolder sy’n dal y proffil, ac mae tasg cron yn dechrau yn hollol wahanol, felly mae --config office.ovpn yn datrys i ffeil nad yw yno ac mae’r neges yn cael ei darllen fel ffeil ar goll yn hytrach na thwnnel ar goll.

Profwch hyn drwy ddiosg yr amgylchedd

Atgynhyrchwch yr amgylchedd bychan yn uniongyrchol: env -i PATH=/usr/bin:/bin /usr/sbin/openvpn --config office.ovpn --verb 4. Mae cwyn am lwybr neu derfynell o’r rhediad hwnnw yn golygu bod y broblem uwchben y VPN. Os yw’n cysylltu, y prif amheuon sy’n weddill yw’r cyfrif y mae’n rhedeg oddi tano, y cyfeiriadur y mae’n dechrau ynddo, a’r cymhwyster y mae’n ei gyflwyno. Mae’r naill ganlyniad neu’r llall yn well nag un rownd arall o wirio tystysgrifau.

Yna gwnewch y lapio yn hunan-adrodd. Gadewch â statws gwahanol ar gyfer pob cam a gyrhaeddodd, cofnodwch y ddwy ffrwd gyda stamp amser, a bydd y methiant nesaf yn dweud wrthych a fu farw wrth ddatrys y llwybr, wrth ddilysu, neu ar ôl i’r twnnel fod i fyny’n barod.

Mae ar uned angen trefn gywir hefyd: Wants=network-online.target ynghyd â After=network-online.target yn cadw’r cleient rhag dechrau cyn bod anerchiad neu lwybr rhagosodedig yn bodoli, sydd fel arall yn ymddangos fel gwallau tystysgrif neu TLS sy’n diflannu ar ailgychwyn â llaw.

Erthyglau cysylltiedig