Faili arobaini za .ovpn kwa nchi moja hufika kutoka kwa mtoa huduma, na mpango unaonekana wazi: nakili moja ya nasibu mahali pake, kisha anzisha handaki. Ukiandikwa kama bomba ndani ya ExecStart, mpango huo hufa wakati wa kuwasha na msimbo wa hali usioeleza chochote. Faili ya kitengo si script, na ukarabati ni ama kuleta shell kwa uwazi au kuacha kabisa kuchagua faili.

Dalili: kitengo kinachowaka na kufa papo hapo

Hali inaonyesha huduma ilishindwa katika sehemu ya sekunde, na mstari wa jarida unataja amri ambayo hakuna shell ingewahi kuipokea. Hakuna kitu kuhusu handaki kinaonekana, kwa sababu handaki haikuanza kamwe.

Kusoma mstari halisi wa amri kutoka jarida ndiyo njia ya haraka zaidi ya kuthibitisha hili. systemd hurudia kile ilichotekeleza, na mfuatano utaonyesha herufi za bomba kama hoja halisi badala ya waendeshaji.

Kwa nini ExecStart haiwezi kuendesha bomba

systemd hugawanya mstari wa amri yenyewe, hutumia nukuu zake na ubadilishaji wa vigeu, kisha hutekeleza matokeo moja kwa moja. Mabomba, uelekezaji upya, upanuzi wa glob na shell na ubadilishaji wa amri si sehemu ya sarufi hiyo. Hii ni chaguo la usanifu na si uachaji: kitengo husema kwa uwazi kile kinachopaswa kuendeshwa, na mantiki ya shell ni ya script ambayo kitengo hukiita. Marekebisho yote mawili yanafuata kutokana na hilo, na hakuna hata moja linalohitaji kitengo kupewa mamlaka zaidi.

Pia inaeleza msimbo wa kutoka unaopotosha. Hoja ya kwanza inachukuliwa kama faili tendaji, kwa hiyo mstari mbovu hushindwa kabla sehemu yoyote ya mantiki yako kuendeshwa.

Fanya uchaguzi katika ExecStartPre

Ukarabati wa moja kwa moja ni hatua ya maandalizi inayoiita shell kwa uwazi, na kuweka uchaguzi na uanzishaji katika kitengo kimoja ili kushindwa kwa kimoja kusimwachie kingine kifanye kazi peke yake.

[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

Maelezo matatu huamua kama hii itastahimili kukutana na mashine halisi. Utaji wa majina ni mtego wa kwanza: systemd hubadilisha %i wakati wa kuchambua kitengo, muda mrefu kabla bash iendeshwe, kwa hiyo kibainishi lazima kisimame nje ya nukuu moja. xargs -r huzuia cp kuendeshwa bila hoja wakati glob hailingani na chochote. Na hatua ya maandalizi inayoshindwa husimamisha kitengo, na hilo ndilo tokeo sahihi: kuanza na usanidi wa jana ni mbaya kuliko kutokuanza. Uchaguzi wa nasibu ambao daima huchukua faili moja kwa kawaida si bahati mbaya. Angalia kama faili iliyonakiliwa inafutwa na sasisho la kifurushi, au kama glob inalingana na kiingilio kimoja tu kilichopitwa na wakati.

Au acha OpenVPN ichague kituo cha mwisho

OpenVPN tayari inaweza kushikilia vituo kadhaa vya mwisho katika wasifu mmoja na kuchagua kati yao kwa nasibu, jambo ambalo huondoa kabisa shell, nakala na ufikiaji wa kuandika kutoka kwenye njia ya kuwasha.

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

Umbo hili huweka uchaguzi wa seva ndani ya faili iliyoandikwa na mtoa huduma, kwa hiyo mzunguko unaobadilisha majina ya faili hauvunji kitengo. Pia hufanya orodha ya wagombea ikaguliwe, jambo ambalo glob juu ya saraka haliwa hilo kamwe. Uchanganyaji bado unastahili nafasi yake wakati wasifu unatofautiana zaidi ya kituo kimoja cha mwisho: vyeti tofauti, maagizo tofauti ya uelekezaji, sera tofauti ya usimbaji fiche. Katika hali hiyo uchaguzi ni kati ya usanidi mzima, na hatua ya shell ndiyo njia ya uaminifu ya kueleza hilo.

Soma tena kielelezo na faili iliyokitumia

Thibitisha ni kitengo kipi kinachoendeshwa kweli kabla ya kutatua hitilafu za maudhui yake. Huduma ya meta iliyofungashwa na kiolezo ni miundombinu; vitengo vinavyolingana na faili zako ndivyo vielelezo vinavyopewa majina hayo.

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

Kielelezo ambacho hakuna anayekumbuka kukiwasha mara nyingi hutupeleka kwenye faili ya usanidi iliyopotea katika saraka ya kifurushi. Zima kile kielelezo kilichotajwa badala ya kiolezo, vinginevyo uboreshaji wa kifurushi unaofuata utakirudisha. Baada ya mabadiliko, anza kitengo na usome mstari wa amri unaoripotiwa na jarida, kisha thibitisha njia ya usanidi iliyoifungua kweli. Ukaguzi huo mmoja hutenganisha uchaguzi wa nasibu unaofanya kazi na huduma inayotumia tena kimya kimya faili ya mwezi uliopita.

Makala zinazohusiana