ExecStart mhuwiex shell: tiswija ta’ unita tas-servizz VPN
ExecStart iħaddem program bl-argumenti, mhux pipeline tas-shell. Uża interpretu espliċitu jew skript vera, imbagħad ivverifika l-unita u aqra l-ġurnal.
Ikkopja linja ta’ kmand li taħdem fl-ExecStart, erġa’ għabbi, u l-unita tfalli jew toħroġ bil-kwiet bl-argumenti meqjusa bħala ismijiet ta’ fajls. Xejn mhu miksur f’systemd. ExecStart hija lista ta’ argumenti, mhux shell, għalhekk pipes, ridirezzjoni u kundizzjonijiet jitilfu t-tifsira tagħhom fil-mument li joħorġu mit-terminal tiegħek. Iddeċiedi fejn għandu jkun is-shell, imbagħad ikteb unita li tgħid eżattament x’għandu jiġi esegwit.
Għala l-pipeline fl-ExecStart ma tagħmel xejn
Meta kmand jiġi miktub f’terminal, is-shell l-ewwel janalizzah. Dan jibni pipeline, jiftaħ fajls għar-ridirezzjoni u jespandi l-varjabbli qabel ma jibda xi program. systemd ma jagħmel xejn minn dan: jaqsam l-ExecStart skont ir-regoli tiegħu u jesegwixxi l-program li jirriżulta b’dawk l-argumenti. Għalhekk > jasal bħala argument litterali, u | jingħata lill-program minflok ma jgħaqqad żewġ proċessi. L-unita mhijiex tħarri ħażin; is-sintassi kienet tfisser xi ħaġa oħra.
Dan huwa apposta u mhux traskuraġni, għax it-trattament prevedibbli tal-argumenti huwa dak li jagħmel l-unitajiet verifikabbli. Dan jissorprendi biss lil dawk li jassumu li hemm shell.
Ikteb unita li tgħid eżattament x’inhu jaħdem
Ibda b’unita żgħira li l-iskop tagħha jidher fil-ġurnal, sabiex il-problemi tal-analiżi jibqgħu separati mill-problemi tal-mina. Din tirrapporta biss il-verżjoni ta’ binariu.
[Unit]
Description=Report the installed OpenVPN version
[Service]
Type=oneshot
ExecStart=/usr/sbin/openvpn --version
StandardOutput=journal
StandardError=journalIl-passaġġ huwa sostitut, għalhekk issostitwixxih bil-binariu li huwa tassew installat. Type=oneshot hu adatt għal kmand li jaħdem sal-aħħar, u s-settings tal-ġurnal ipoġġu l-output tiegħu fejn tista’ taqrah mingħajr terminal. M’hemmx taqsima tal-installazzjoni apposta, għalhekk l-unita tinsejjaħ bl-idejn minflok ma tiġi attivata fil-boot. Ivverifika l-fajl qabel ma tibdih, għax żball tat-tipi fl-isem ta’ direttiva jfalli b’mod differenti minn żball fil-passaġġ.
systemd-analyze verify /etc/systemd/system/openvpn-version.service
systemctl start openvpn-version.serviceŻomm il-loġika tas-shell fi skript
Meta assistent verament jeħtieġ loġika kundizzjonali, poġġi dik il-loġika fi skript u sejjaħlu b’mod espliċitu. L-iskript jeħtieġ linja tal-interpretu, permess tal-eżekuzzjoni u kodiċijiet tal-ħruġ li s-servizz jista’ jirrapporta. It-tnedija ta’ /bin/sh -c b’kmand bejn il-virgoletti taħdem, iżda taħbi r-regoli tal-virgoletti ġewwa unita u tagħmel ir-reviżjoni aktar diffiċli. Skript bl-isem jista’ jiġi ttestjat bl-idejn u mibdul aktar tard mingħajr ma tiġi editjata l-unita. Tiddependix fuq il-profil tas-shell tal-utent interattiv, għax servizz jibda bl-ambjent tiegħu stess.
Issettja WorkingDirectory meta l-passaġġi relattivi jimpurtaw, u għaddi l-ambjent permezz tad-direttivi appoġġjati tal-unita minflok ma tesportah f’terminal. Is-sigrieti jappartjenu għal fajls protetti jew kredenzjali, mhux għal listi ta’ argumenti li l-ġurnal jista’ jirreġistra.
Iċċekkja l-unita li tassew teżisti
Il-fajls drop-in ibiddlu l-imġiba mingħajr ma jmissu l-fajl li tiftakar li editjajt. Aqra dak li għabba l-maniġer u dak li rrapporta l-aħħar ġirja.
systemctl cat vpn-helper.service
journalctl -u vpn-helper.service -n 20 --no-pagerId-dump tal-unita jinkludi l-fajls drop-in fl-ordni tal-għabbi, u minn hemm normalment jiġi ExecStart mhux mistenni. Wara kull bidla, erġa’ għabbi l-maniġer u kkonferma li d-definizzjoni l-ġdida hija dak li jistampa systemctl cat. Il-ġurnal juri l-linja tal-kmand eżatta u l-istat tal-ħruġ, li jissepara problema tal-argumenti minn binariu nieqes jew żball tal-permessi. Imbagħad iddeċiedi jekk l-assistent jappartjenix għaċ-ċiklu tal-ħajja tal-VPN eżistenti jew għandux jibqa’ dijanjożi manwali, għax it-tieni proċess tal-mina fl-isfond joħloq sid kompetitur.
Unita li tistampa l-output it-tajjeb fuq talba hija pass ewlieni tajjeb. Għadha mhijiex mina, u m’għandhiex tagħmel tabirruħha li hija waħda.