Dewis OpenVPN ar hap yn systemd: pam mae ExecStart yn methu
Nid cregyn gorchmynion yw systemd, felly mae copi cymysg y tu mewn i ExecStart yn marw. Symudwch y dewis i ExecStartPre, neu gadewch i OpenVPN ddewis gweinydd ei hun.
Mae pedwar deg o ffeiliau .ovpn ar gyfer un wlad yn dod gan ddarparwr, ac mae’r cynllun yn edrych yn amlwg: copïwch un ar hap i’w le, yna cychwyn y tiwnel. Wedi’i ysgrifennu fel pibell y tu mewn i ExecStart, mae’r cynllun hwnnw’n marw wrth gychwyn gyda chod statws nad yw’n esbonio dim. Nid sgript yw ffeil yr uned, a’r atgyweiriad yw naill ai dod â chregyn gorchmynion i mewn yn benodol neu roi’r gorau i ddewis ffeiliau’n gyfan gwbl.
Y symptom: uned sy’n cychwyn ac yn marw ar unwaith
Mae’r statws yn dangos bod y gwasanaeth wedi methu mewn ffracsiwn o eiliad, ac mae llinell y cyfnodolyn yn enwi gorchymyn na fyddai unrhyw gregyn gorchmynion wedi’i dderbyn erioed. Nid oes dim am y tiwnel yn ymddangos, oherwydd ni ddechreuodd y tiwnel erioed.
Darllen yr union linell orchymyn o’r cyfnodolyn yw’r ffordd gyflymaf o gadarnhau hyn. Mae systemd yn ailadrodd yr hyn a weithredodd, a bydd y llinyn yn dangos nodau’r bibell fel dadleuon llythrennol yn hytrach nag fel gweithredwyr.
Pam na all ExecStart redeg pibell
Mae systemd yn rhannu’r linell orchymyn ei hun, yn cymhwyso ei ddyfynnu a’i amnewid newidynnau ei hun, ac yna’n gweithredu’r canlyniad yn uniongyrchol. Nid yw pibellau, ailgyfeirio, globio gan gregyn gorchmynion ac amnewid gorchmynion yn rhan o’r ramadeg honno o gwbl. Dewis dylunio yw hyn yn hytrach nag esgeulustod: mae uned yn ddatganiadol am yr hyn i’w redeg, ac mae rhesymeg cregyn gorchmynion yn perthyn i sgript y mae’r uned yn ei galw. Mae’r ddau atgyweiriad yn dilyn o hynny, ac nid oes angen rhoi mwy o fraint i’r uned ar y naill na’r llall.
Mae hefyd yn esbonio’r cod gadael camarweiniol. Mae’r ddadl gyntaf yn cael ei thrin fel y deuaidd, felly mae llinell gamffurfiedig yn methu cyn i unrhyw ran o’ch rhesymeg redeg.
Gwnewch y dewis yn ExecStartPre
Yr atgyweiriad uniongyrchol yw cam paratoi sy’n galw cregyn gorchmynion yn benodol, gan gadw’r dewis a’r cychwyn yn yr un uned fel na all methiant yn y naill adael y llall yn rhedeg ar ei ben ei hun.
[Service]
Type=notify
ExecStartPre=/bin/bash -c "ls /etc/openvpn/profiles/au* | shuf -n 1 | xargs -r -I{} cp -f {} /etc/openvpn/%i.conf"
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
Mae tri manylyn yn penderfynu a fydd hyn yn goroesi cyfarfod â pheiriant go iawn. Enwi yw’r trap cyntaf: mae systemd yn amnewid %i wrth ddadansoddi’r uned, ymhell cyn i bash redeg, felly rhaid i’r manylebydd sefyll y tu allan i ddyfynodau sengl. Mae xargs -r yn atal cp rhag rhedeg heb ddadl pan nad yw’r glob yn cyfateb i ddim. Ac mae cam paratoi sy’n methu yn atal yr uned, a dyna’r canlyniad cywir: mae cychwyn â chyfluniad ddoe yn waeth na pheidio â chychwyn. Nid anlwc fel arfer yw dewis ar hap sy’n cymryd yr un ffeil bob tro. Gwiriwch a yw’r ffeil a gopïwyd yn cael ei throsysgrifo gan ddiweddariad pecyn, neu a yw’r glob yn cyfateb i un cofnod hen ffasiwn yn unig.
Neu gadewch i OpenVPN ddewis y pen draw
OpenVPN eisoes yn gallu dal sawl pen draw mewn un proffil a dewis yn eu plith ar hap, sy’n tynnu’r gregyn gorchmynion, y copi a’r hawl ysgrifennu allan o lwybr y cychwyn yn gyfan gwbl.
client
remote-random
<connection>
remote au1.example.net 1194 udp
</connection>
<connection>
remote au2.example.net 1194 udp
</connection>
Mae’r ffurf hon yn cadw dewis y gweinydd y tu mewn i’r ffeil a ysgrifennwyd gan y darparwr, felly nid yw cylchdro sy’n ailenwi ffeiliau yn torri’r uned. Mae hefyd yn gwneud y rhestr ymgeiswyr yn archwiladwy, rhywbeth nad yw glob dros gyfeiriadur byth yn ei wneud. Mae’r cymysgu yn dal i haeddu ei le pan fydd proffiliau’n gwahaniaethu mewn mwy na phen draw: tystysgrifau gwahanol, cyfarwyddebau llwybro gwahanol, polisi seiffr gwahanol. Yn yr achos hwnnw mae’r dewis rhwng cyfluniadau cyfan ac mae cam cregyn gorchmynion yn ffordd onest o’i fynegi.
Darllenwch yr enghraifft a’r ffeil a ddefnyddiodd yn ôl
Cadarnhewch pa uned sy’n rhedeg mewn gwirionedd cyn dadfygio ei chynnwys. Mae’r gwasanaeth meta pecyn a’r templed yn seilwaith; yr unedau sy’n cyfateb i’ch ffeiliau yw’r enghreifftiau a enwir ar eu hôl.
systemctl list-units 'openvpn*'
systemctl cat [email protected]
journalctl -u openvpn@au -n 30 --no-pager
Mae enghraifft nad oes neb yn cofio ei galluogi fel arfer yn mynd yn ôl at ffeil gyfluniad grwydrol yng nghyfeiriadur y pecyn. Diffoddwch yr enghraifft a enwir honno yn lle’r templed, fel arall bydd diweddariad y pecyn nesaf yn dod â hi’n ôl. Ar ôl y newid, cychwynnwch yr uned a darllenwch y linell orchymyn y mae’r cyfnodolyn yn ei hadrodd, yna cadarnhewch y llwybr cyfluniad y gwnaeth ei agor mewn gwirionedd. Mae’r un gwiriad hwnnw’n gwahanu dewis ar hap sy’n gweithio oddi wrth wasanaeth sy’n ailddefnyddio ffeil o fis diwethaf yn dawel.