ExecStart is gjin shell: in VPN-helpienheid reparearje
ExecStart rint in programma mei arguminten, gjin shell-piiplieding. Brûk in eksplisite ynterpreter of in echt skript, kontrolearje dan de ienheid en lês it sjoernaal.
Kopiearje in wurkjende kommandorigel yn ExecStart, werlaad, en de ienheid mislearret of einiget stil, mei’t de arguminten as bestânsnammen behannele wurde. Der is neat stikken yn systemd. ExecStart is in argumintlist, gjin shell, dat piipen, omlieding en betingsten ferlieze har betsjutting op it stuit dat se jo terminal ferlitte. Beslis wêr’t de shell heart, en skriuw dan in ienheid dy’t krekt seit wat útfierd wurde moat.
Wêrom’t de piip yn ExecStart neat docht
As in kommando yn in terminal typt wurdt, parsearret de shell it earst. Hy bout in piip, iepenet bestannen foar omlieding en wreidet fariabelen út foardat hokker programma dan ek begjint. systemd docht dêr neat fan: it splitst ExecStart neffens syn eigen regels en fiert it resultearjende programma mei dy arguminten út. Dêrom komt > as in letterlik argumint oan, en in | wurdt oan it programma jûn ynstee fan twa prosessen te ferbinen. De ienheid hâldt him net ferkeard; de syntaks betsjutte wat oars.
Dat is mei opsetsin en net sleau, want foarsisbere behanneling fan arguminten makket ienheden kontrolearber. It fernuveret allinnich minsken dy’t oannimme dat der in shell is.
Skriuw in ienheid dy’t krekt seit wat rint
Begjin mei in lytse ienheid waans doel yn it sjoernaal te sjen is, sadat parsearproblemen los fan tunnelproblemen bliuwe. Dizze rapportearret allinnich de ferzje fan in binêre.
[Unit]
Description=Report the installed OpenVPN version
[Service]
Type=oneshot
ExecStart=/usr/sbin/openvpn --version
StandardOutput=journal
StandardError=journalIt paad is in plakhâlder, ferfange it dus troch de binêre dy’t echt ynstallearre is. Type=oneshot past by in kommando dat oant it ein rint, en de sjoernaalynstellingen sette syn útfier dêr’t jo it sûnder terminal lêze kinne. Der is mei opsetsin gjin ynstallaasjeseksje, dat de ienheid wurdt mei de hân oproppen ynstee fan by it opstarten ynskeakele. Falidearje it bestân foar’t jo it starte, want in typflater yn in rjochtingsnamme mislearret oars as in typflater yn it paad.
systemd-analyze verify /etc/systemd/system/openvpn-version.service
systemctl start openvpn-version.serviceHâld shell-logika yn in skript
As in helper echt betingstlike logika nedich hat, set dy logika dan yn in skript en rop it eksplisyt oan. It skript hat in ynterpreteryline, útfieringsrjocht en útgongskoades nedich dy’t de tsjinst rapportearje kin. It starten fan /bin/sh -c mei in kommando tusken oanhelstekens wurket, mar it ferberget oanhelregels yn in ienheid en makket kontrôle dreger. In neamd skript kin mei de hân test wurde en letter ferfongen wurde sûnder de ienheid te bewurkjen. Fertrou net op it shell-profil fan de ynteraktive brûker, want in tsjinst begjint mei syn eigen omjouwing.
Set WorkingDirectory as relative paden fan belang binne, en jou omjouwing troch fia de stipe rjochtingen fan de ienheid ynstee fan it yn in terminal te eksportearjen. Geheimen hearre by beskerme bestannen of legitimaaasjes, net by argumintlisten dy’t it sjoernaal fêstlizze kin.
Kontrolearje de ienheid dy’t echt bestiet
Drop-in-bestannen feroarje gedrach sûnder it bestân oan te reitsen dat jo jo bewurkje te herinnerjen. Lês wat de behearder laden hat en wat de lêste run rapportearre.
systemctl cat vpn-helper.service
journalctl -u vpn-helper.service -n 20 --no-pagerDe ienheidsdump befettet drop-in-bestannen yn laadfolchoarder, en dêrfandinne komt meast in ûnferwachte ExecStart. Werlaad nei elke feroaring de behearder en befêstigje dat de nije definysje is wat systemctl cat prints. It sjoernaal toant de krekte kommandorigel en útgongsstatus, wat in argumintprobleem skiedt fan in ûntbrekkende binêre of in tastimmingsflater. Beslis dan oft de helper by de besteande VPN-libenssyklus heart of in hânmjittige diagnostyk bliuwe moat, want in twadde eftergrûntunnelproses makket in konkurrearjende eigner.
In ienheid dy’t op oanfraach de krekte útfier print, is in goede earste mylpeal. It is noch gjin tunnel, en it moat net dwaan as wie it ien.