ఒక దేశం కోసం నలభై .ovpn ఫైళ్లు ప్రదాత నుండి వస్తాయి, మరియు ప్రణాళిక స్పష్టంగా కనిపిస్తుంది: యాదృచ్ఛికమైన ఒకదాన్ని దాని స్థానానికి కాపీ చేయండి, తర్వాత సొరంగాన్ని ప్రారంభించండి. ExecStart లోపల పైప్లైన్గా రాసినప్పుడు, ఆ ప్రణాళిక బూట్ సమయంలో ఏమీ వివరించని స్థితి కోడ్తో చనిపోతుంది. యూనిట్ ఫైల్ స్క్రిప్ట్ కాదు, మరియు సరిదిద్దడం అంటే shell ను స్పష్టంగా తీసుకురావడం లేదా ఫైళ్లను ఎంచుకోవడం పూర్తిగా ఆపడం.

లక్షణం: ప్రారంభమై వెంటనే చనిపోయే యూనిట్

సేవ సెకనులో ఒక భాగంలో విఫలమైందని స్థితి చూపిస్తుంది, మరియు జర్నల్ లైన్ ఏ shell కూడా ఎప్పుడూ పొందని ఆదేశాన్ని పేర్కొంటుంది. సొరంగం గురించి ఏమీ కనిపించదు, ఎందుకంటే సొరంగం ఎప్పుడూ ప్రారంభం కాలేదు.

జర్నల్ నుండి ఖచ్చితమైన ఆదేశ లైన్ చదవడం దీన్ని నిర్ధారించడానికి వేగవంతమైన మార్గం. systemd తాను నిర్వహించినదాన్ని పునరావృతం చేస్తుంది, మరియు స్ట్రింగ్ పైప్లైన్ అక్షరాలను ఆపరేటర్లుగా కాకుండా అక్షరార్థ ఆర్గ్యుమెంట్లుగా చూపిస్తుంది.

ExecStart పైప్లైన్ను ఎందుకు నడపలేదు

systemd తానే ఆదేశ లైన్ను విభజిస్తుంది, తన స్వంత కోట్ మరియు వేరియబుల్ ప్రతిక్షేపణను వర్తింపజేస్తుంది, ఆపై ఫలితాన్ని నేరుగా అమలు చేస్తుంది. పైప్లు, రీడైరెక్షన్, shell యొక్క గ్లోబ్ విస్తరణ మరియు ఆదేశ ప్రతిక్షేపణ ఈ వ్యాకరణంలో భాగమే కావు. ఇది రూపకల్పన ఎంపిక, మినహాయింపు కాదు: యూనిట్ ఏమి నడపాలో ప్రకటనాత్మకంగా చెబుతుంది, మరియు shell తర్కం యూనిట్ పిలిచే స్క్రిప్ట్కు చెందుతుంది. రెండు సరిదిద్దడాలు ఇక్కడి నుండే వస్తాయి, ఏదీ యూనిట్కు ఎక్కువ అధికారాలు ఇవ్వాల్సిన అవసరం లేదు.

ఇది తప్పుదోవ పట్టించే నిష్క్రమణ కోడ్ను కూడా వివరిస్తుంది. మొదటి ఆర్గ్యుమెంట్ బైనరీగా పరిగణించబడుతుంది, కాబట్టి మీ తర్కంలోని ఏ భాగమూ నడవకముందే తప్పు లైన్ విఫలమవుతుంది.

ఎంపికను ExecStartPre లో చేయండి

నేరుగా సరిదిద్దడం అంటే shell ను స్పష్టంగా పిలిచే సన్నాహక దశ, ఇది ఎంపికను మరియు ప్రారంభాన్ని ఒకే యూనిట్లో ఉంచుతుంది, తద్వారా ఒకదానిలో వైఫల్యం మరొకదాన్ని ఒంటరిగా నడవనివ్వదు.

[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

నిజమైన యంత్రంతో సంబంధాన్ని ఇది తట్టుకుంటుందా అని మూడు వివరాలు నిర్ణయిస్తాయి. పేరు పెట్టడం మొదటి ఉచ్చు: systemd యూనిట్ను పార్స్ చేస్తున్నప్పుడే, bash నడవకముందే %i ను ప్రతిక్షేపిస్తుంది, కాబట్టి స్పెసిఫైయర్ ఏక కోట్స్ వెలుపల ఉండాలి. గ్లోబ్ ఏదీ సరిపోలనప్పుడు cp ఆర్గ్యుమెంట్ లేకుండా నడవకుండా xargs -r నిరోధిస్తుంది. మరియు విఫలమైన సన్నాహక దశ యూనిట్ను ఆపుతుంది, మరియు అదే సరైన ఫలితం: నిన్నటి కాన్ఫిగరేషన్తో ప్రారంభించడం ప్రారంభించకపోవడం కంటే అధ్వాన్నం. ఎప్పుడూ ఒకే ఫైల్ను తీసుకునే యాదృచ్ఛిక ఎంపిక సాధారణంగా దురదృష్టం కాదు. కాపీ చేసిన ఫైల్ ప్యాకేజీ అప్డేట్ ద్వారా ఓవర్రైట్ అవుతోందా, లేదా గ్లోబ్ ఒకే పాత ఎంట్రీతో మాత్రమే సరిపోలుతోందా అని తనిఖీ చేయండి.

లేదా OpenVPN ఎండ్పాయింట్ను ఎంచుకోనివ్వండి

OpenVPN ఇప్పటికే ఒక ప్రొఫైల్లో అనేక ఎండ్పాయింట్లను ఉంచుకోగలదు మరియు వాటి మధ్య యాదృచ్ఛికంగా ఎంచుకోగలదు, ఇది shell, కాపీ మరియు రాయడం యాక్సెస్ను బూట్ మార్గం నుండి పూర్తిగా తీసివేస్తుంది.

client
remote-random
<connection>
remote au1.example.net 1194 udp
</connection>
<connection>
remote au2.example.net 1194 udp
</connection>

ఈ రూపం సెర్వర్ ఎంపికను ప్రదాత రాసిన ఫైల్ లోపలే ఉంచుతుంది, కాబట్టి ఫైళ్లను పేరు మార్చే రొటేషన్ యూనిట్ను విచ్ఛిన్నం చేయదు. ఇది అభ్యర్థుల జాబితాను ఆడిట్ చేయదగినదిగా కూడా చేస్తుంది, ఇది డైరెక్టరీపై గ్లోబ్కు ఎప్పుడూ ఉండదు. ప్రొఫైళ్లు ఎండ్పాయింట్ కంటే ఎక్కువ విషయాల్లో భిన్నంగా ఉన్నప్పుడు షఫుల్ ఇప్పటికీ తన స్థానాన్ని పొందుతుంది: వేరే సర్టిఫికెట్లు, వేరే రూటింగ్ సూచనలు, వేరే సైఫర్ విధానం. అలాంటి సందర్భంలో ఎంపిక పూర్తి కాన్ఫిగరేషన్ల మధ్య ఉంటుంది మరియు shell దశ దాన్ని వ్యక్తపరచడానికి నిజాయితీ మార్గం.

ఉపయోగించిన ఇన్స్టాన్స్ మరియు ఫైల్ను తిరిగి చదవండి

దాని కంటెంట్ను డీబగ్ చేసే ముందు ఏ యూనిట్ నిజంగా నడుస్తోందో నిర్ధారించండి. ప్యాకేజీ చేసిన మెటా సేవ మరియు టెంప్లేట్ మౌలిక సదుపాయం; మీ ఫైళ్లకు సరిపోయే యూనిట్లే వాటి పేరుతో పిలవబడే ఇన్స్టాన్స్లు.

systemctl list-units 'openvpn*'
systemctl cat [email protected]
journalctl -u openvpn@au -n 30 --no-pager

ఎవరూ ప్రారంభించినట్టు గుర్తులేని ఇన్స్టాన్స్ సాధారణంగా ప్యాకేజీ డైరెక్టరీలో తప్పిపోయిన కాన్ఫిగరేషన్ ఫైల్కు దారి తీస్తుంది. టెంప్లేట్కు బదులుగా ఆ పేరు ఉన్న ఇన్స్టాన్స్ను ఆఫ్ చేయండి, లేకపోతే తదుపరి ప్యాకేజీ అప్గ్రేడ్ దాన్ని తిరిగి తెస్తుంది. మార్పు తర్వాత యూనిట్ను ప్రారంభించి, జర్నల్ నివేదించే ఆదేశ లైన్ను చదవండి, ఆపై అది నిజంగా తెరిచిన కాన్ఫిగరేషన్ మార్గాన్ని నిర్ధారించండి. ఆ ఒక తనిఖీ పనిచేసే యాదృచ్ఛిక ఎంపికను గత నెల ఫైల్ను నిశ్శబ్దంగా తిరిగి ఉపయోగిస్తున్న సేవ నుండి వేరు చేస్తుంది.

సంబంధిత వ్యాసాలు