ExecStart si shell: kurekebisha kitengo cha msaidizi wa VPN
ExecStart huendesha programu na hoja, si bomba la shell. Tumia mkalimani dhahiri au skripti halisi, kisha thibitisha kitengo na usome jarida.
Nakili mstari wa amri unaofanya kazi kwenye ExecStart, pakia upya, na kitengo hushindwa au hutoka kimya kimya huku hoja zikichukuliwa kama majina ya faili. Hakuna kilichovunjika katika systemd. ExecStart ni orodha ya hoja, si shell, kwa hivyo mabomba, uelekezaji upya na masharti hupoteza maana mara tu yanapoondoka kwenye terminal yako. Amua shell inapaswa kuwa wapi, kisha andika kitengo kinachosema hasa kile kinachopaswa kutekelezwa.
Kwa nini bomba katika ExecStart halifanyi kitu
Amri inapoandikwa kwenye terminal, shell huichanganua kwanza. Hujenga bomba, hufungua faili kwa uelekezaji upya na kupanua vigeu kabla programu yoyote kuanza. systemd haifanyi lolote la hayo: hugawanya ExecStart kwa kanuni zake na kuendesha programu inayotokana na hoja hizo. Kwa hivyo > huja kama hoja halisi, na | hupewa programu badala ya kuunganisha michakato miwili. Kitengo hakifanyi vibaya; sintaksia ilimaanisha kitu kingine.
Hilo ni kusudi na si uzembe, kwa sababu utunzaji wa hoja unaotabirika ndio unaofanya vitengo kukaguliwa. Hushangaza tu wale wanaodhani kuwa shell ipo.
Andika kitengo kinachosema hasa kile kinachoendeshwa
Anza na kitengo kidogo ambacho madhumuni yake yanaonekana kwenye jarida, ili matatizo ya uchanganuzi yabaki tofauti na matatizo ya handaki. Hiki huripoti toleo la binari pekee.
[Unit]
Description=Report the installed OpenVPN version
[Service]
Type=oneshot
ExecStart=/usr/sbin/openvpn --version
StandardOutput=journal
StandardError=journalNjia ni kishika nafasi, kwa hivyo weka binari iliyosakinishwa kweli. Type=oneshot inafaa kwa amri inayoendeshwa hadi mwisho, na mipangilio ya jarida huweka matokeo yake mahali unapoweza kuyasoma bila terminal. Hakuna sehemu ya usakinishaji kwa kusudi, kwa hivyo kitengo huitwa kwa mkono badala ya kuwezeshwa wakati wa kuwasha. Thibitisha faili kabla ya kuianzisha, kwa sababu makosa ya kuandika katika jina la maagizo hushindwa tofauti na kosa kwenye njia.
systemd-analyze verify /etc/systemd/system/openvpn-version.service
systemctl start openvpn-version.serviceWeka mantiki ya shell katika skripti
Wakati msaidizi anahitaji kweli mantiki ya masharti, weka mantiki hiyo katika skripti na uiite kwa uwazi. Skripti inahitaji mstari wa mkalimani, ruhusa ya utekelezaji na misimbo ya kutoka ambayo huduma inaweza kuripoti. /bin/sh -c kwa amri iliyo ndani ya alama za nukuu hufanya kazi, lakini huficha kanuni za nukuu ndani ya kitengo na kufanya ukaguzi kuwa mgumu. Skripti yenye jina inaweza kujaribiwa kwa mkono na kubadilishwa baadaye bila kuhariri kitengo. Usitegemee wasifu wa shell wa mtumiaji anayeingiliana, kwa sababu huduma huanza na mazingira yake yenyewe.
Wakati njia husika ni muhimu WorkingDirectory weka, na pitisha mazingira kupitia maagizo ya kitengo yanayotumika badala ya kuyasafirisha kwenye terminal. Siri ni za faili zilizolindwa au vitambulisho, si orodha za hoja ambazo jarida linaweza kurekodi.
Kagua kitengo kilichopo kweli
Faili za drop-in hubadilisha tabia bila kugusa faili unalokumbuka kuwa uliihariri. Soma kile meneja alichopakia na kile mbio za mwisho ziliripoti.
systemctl cat vpn-helper.service
journalctl -u vpn-helper.service -n 20 --no-pagerUtoaji wa kitengo hujumuisha faili za drop-in kwa mpangilio wa upakiaji, na hapo ndipo ExecStart isiyotarajiwa huja mara nyingi. Baada ya kila mabadiliko, pakia upya meneja na uthibitishie kuwa ufafanuzi mpya ndio unaochapishwa na systemctl cat. Jarida huonyesha mstari halisi wa amri na hali ya kutoka, jambo linalotenganisha tatizo la hoja na binari inayokosekana au kosa la ruhusa. Kisha amua kama msaidizi ni sehemu ya mzunguko wa maisha wa VPN uliopo au anapaswa kubaki uchunguzi wa mkono, kwa sababu mchakato wa pili wa handaki ya chinichini huunda mmiliki pinzani.
Kitengo kinachochapisha matokeo sahihi inapoomba ni hatua nzuri ya kwanza. Bado si handaki, na hakipaswi kujifanya kuwa handaki.