Gall unedau edrych yn gywir, gall systemctl start adrodd am lwyddiant, ac ar ôl deng eiliad mae'r gwasanaeth yn eistedd yn anweithredol. Neu mae'n ailgychwyn bob hanner munud nes bod y terfyn cychwyn yn ei atal. Nid yw'r naill ymddygiad na'r llall yn ddiffyg rhwydwaith: mae'r uned yn disgrifio oes proses nad yw'n cyfateb i'r hyn y mae'r cleient yn ei wneud mewn gwirionedd. Gall y cleient fforchio ac allan, neu gyflunio'r sesiwn ac allan ar unwaith.

Pam mae'r uned yn mynd yn anweithredol eiliadau ar ôl cychwyn llwyddiannus

Mae systemd yn deillio'r cyflwr o'r broses a gychwynnodd, felly mae Type= yn honiad am y broses honno, nid yn ddogfennaeth. Gyda Type=simple, mae'r uned yn cyfrif fel un weithredol tra bo'r gorchymyn yn rhedeg ac yn mynd yn anweithredol pan fydd yn dychwelyd. Felly mae cleient sy'n trosglwyddo'r cysylltiad i helpwr ac yn allan yn edrych fel damwain, hyd yn oed pan fo'r tiwnel i fyny. Yna mae'r journal yn dangos patrwm cychwyn-ac-atal sy'n darllen fel deuaidd sy'n methu.

Darllenwch fath yr uned ochr yn ochr ag ymddygiad y cleient cyn cyffwrdd â chyfluniad y rhwydwaith.

Dewiswch y math sy'n cyfateb i'r cleient

Mae dau batrwm yn cwmpasu'r rhan fwyaf o CLI gwerthwyr: gorchymyn sy'n cyflunio sesiwn ac yn allan, a gorchymyn sy'n fforchio helpwr cyn dychwelyd. Mae angen siâp uned gwahanol ar bob un.

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnect

Mae oneshot gyda RemainAfterExit=true yn cadw'r uned yn weithredol ar ôl i'r gorchymyn ddychwelyd, sy'n cyfateb i'r patrwm cyflunio-ac-allan, ac mae'r gorchymyn atal yn rhoi cau glân i'r gwasanaeth. Mae cleient sy'n fforchio yn cadw'r un siâp ond mae angen Type=forking arno fel bod systemd yn dilyn y plentyn. Gosodwch Restart=on-failure, RestartSec=30 ac StartLimitBurst meidrol, fel na all methiant darparwr droi'n ddolen ailgychwyn sy'n claddu'r gwall.

Peidiwch byth â gadael i gleient dan oruchwyliaeth ddemoneiddio

Mae goruchwylwyr y tu allan i systemd yn taro'r un wal. Mae sgript rhedeg runit sy'n lansio cleient demoneiddiedig yn dychwelyd at y goruchwyliwr ar unwaith, ac mae hwnnw'n darllen y dychweliad fel damwain ac yn cychwyn copi arall. Mae pob goruchwyliwr yn disgwyl meddu ar y broses flaen, fel y mae sshd -D yn aros o flaen. Tynnwch y faner ddemoni ar gyfer gorchmynion dan oruchwyliaeth a gadewch i'r goruchwyliwr wneud y gwaith cefndir. Mae sgriptiau lapio sy'n dychwelyd cyn bod y tiwnel yn bodoli yn achosi'r un dryswch.

Mae proses sy'n ymddatod ei hun yn anweledig i bopeth a oedd i fod i'w gwylio.

Mae'r sesiwn yn gorffen ac yn mynd â'r tiwnel gyda hi

Mae sesiwn bwrdd gwaith yn berchen ar y cleient mae'n ei lansio. Gorffennwch y mewngofnodi a bydd bys y sesiwn yn diflannu, gan fynd â'r tiwnel, sy'n esbonio pam mae cysylltiad cleient graffegol yn aml yn cwympo pan fydd y ffenestr olaf yn cau. Dylai gweinyddwyr ddefnyddio uned system neu broffil NetworkManager sy'n codi ar ei ben ei hun. Mae uned defnyddiwr yn gwneud synnwyr yn unig pan fo'r tiwnel i fod i orffen gyda'r mewngofnodi, felly rhwymwch hi at darged y sesiwn graffegol a nodwch hynny yn ei disgrifiad.

Defnyddiwr y gwasanaeth yw hanner arall yr un broblem. Mae allwedd sy'n eiddo i root â modd 0600 yn annarllenadwy i uned sy'n rhedeg fel cyfrif arall, waeth beth a gyflawnodd sudo yn eich plisgyn.

systemctl cat openvpn-server@work
sudo chown -R openvpn:network /etc/openvpn/server
sudo find /etc/openvpn -type f -perm /077 -ls

Archebwch y dibynyddion ar ôl i'r cyfeiriad fodoli

Pan fydd daemon yn rhwymo at gyfeiriad tiwnel nad yw wedi'i greu eto, mae'n allan gyda Cannot assign requested address. Yr atgyweiriad yw archebu penodol, nid dolen ailgynnig.

[Unit]
After=network.target [email protected]
Requires=sys-devices-virtual-net-wg0.device

Mae After= yn archebu'r gwaith, tra bo Requires= ar uned y ddyfais yn rhwymo'r dibynnydd at fodolaeth y rhyngwyneb, sy'n gryfach na disgwyl am darged y rhwydwaith yn unig. Ail-lwythwch y rheolwr ar ôl golygu ac ailgychwynnwch y gwasanaeth dibynnol, yna darllenwch ei journal yn lle rhagdybio bod y drefn wedi gweithio. Anfonwch allbwn y cleient i'r journal gyda StandardOutput=journal neu opsiwn log, oherwydd mae cleient dan oruchwyliaeth sy'n ysgrifennu i ffeil nad oes neb yn ei hagor yn edrych yn union fel un na chychwynnodd erioed.

Yna ailgychwynnwch unwaith a chadarnhewch fod yr uned yn weithredol ar ôl i ddyfais y tiwnel ymddangos. Nid yw atgyweiriad a wiriwyd dim ond â systemctl start wedi profi'r drefn gychwyn yr oedd i fod i'w thrwsio.

Erthyglau cysylltiedig