ExecStart shell نه دی: د VPN مرستندوی واحد سمول
ExecStart پروګرام د ارګومېنټونو سره چلوي، نه د shell پايپلاین. واضح ژباړونکی یا ریښتینی سکریپټ وکاروئ، بیا واحد وګورئ او ژورنال ولولئ.
د کار کوونکی کمانډ کرښه ExecStart ته کاپي کړئ، بیا پورته کړئ، او واحد ناکام شي یا په غلې ډول ووځي ځکه چې ارګومېنټونه د فایل نومونو په توګه ګڼل کېږي. په systemd کې هېڅ خراب نه دی. ExecStart د ارګومېنټونو لیست دی، نه shell، نو پایپونه، بیا سمتونه او شرطونه هغه ساه ورکوي چې ستاسو ټرمینل پریږدي. پریکړه وکړئ چې shell چېرته اړ دی، بیا هغه واحد ولیکئ چې په سمه توګه ووایي څه باید اجرا شي.
ولې د ExecStart پایپلاین هېڅ نه کوي
کله چې کمانډ په ټرمینل کې ولیکل شي، shell لومړی هغه تحلیلوي. دا پایپلاین جوړوي، د بیا سمت لپاره فایلونه پرانیزي او بدلونکي پراخوي مخکې لدې چې کوم پروګرام پیل شي. systemd له دې هېڅ نه کوي: دا ExecStart د خپلو قواعدو له مخې وېشي او ترلاسه شوی پروګرام د هغو ارګومېنټونو سره اجرا کوي. له همدې کبله > د لغوي ارګومېنټ په توګه راځي، او | پروګرام ته سپارل کېږي پرځای لدې چې دوه بهیرونه سره ونښلوي. واحد بد چلند نه کوي؛ نحو بل څه مانا لري.
دا ناڅاپي نه، په قصد دی، ځکه چې د ارګومېنټونو وړاندوینه کوونکې چاره هغه څه ده چې واحدونه د پلټنې وړ ګرځوي. یوازې هغو کسانو ته حیرانتیا ده چې فکر کوي shell شته.
هغه واحد ولیکئ چې په سمه توګه ووایي څه چلیږي
له کوچني واحد سره پیل وکړئ چې هدف یې په ژورنال کې ښکاري، ترڅو د تحلیل ستونزې د تونل له ستونزو جلا پاتې شي. دا یوازې د باینري نسخه راپور کوي.
[Unit]
Description=Report the installed OpenVPN version
[Service]
Type=oneshot
ExecStart=/usr/sbin/openvpn --version
StandardOutput=journal
StandardError=journalلار یو ځای نیوونکی دی، نو د هغه باینري سره یې بدل کړئ چې واقعاً نصب دی. Type=oneshot د هغه کمانډ لپاره مناسبه ده چې تر پای پورې چلیږي، او د ژورنال تنظیمات یې تولید هغه ځای کې ږدي چې پرته له ټرمینل یې لولئ. په قصد سره د نصب برخه نشته، نو واحد لاسي بلل کېږي پرځای لدې چې د پیل پر مهال فعال شي. فایل مخکې لدې چې یې پیل کړئ تایید کړئ، ځکه چې د لارښوونې په نوم کې تېروتنه د لارې له تېروتنې سره توپیر لري.
systemd-analyze verify /etc/systemd/system/openvpn-version.service
systemctl start openvpn-version.serviceد shell منطق په سکریپټ کې وساتئ
کله چې مرستندوی واقعاً شرطي منطق ته اړ وي، هغه منطق په سکریپټ کې کېږدئ او په ښکاره یې وبلئ. سکریپټ تفسیرونکې کرښې، د اجرا اجازې او د وتلو کوډونو ته اړ دی چې خدمت یې راپور کولی شي. /bin/sh -c د نقل شوي کمانډ سره پیل کول کار کوي، خو د نقل قواعد د واحد دننه پټوي او بیاکتنه ستونزمنه کوي. نوم لرونکی سکریپټ لاسي ازمویل کېدای شي او بیا د واحد په سمون پرته بدل کېدای شي. د متقابل کارونکي shell پروفایل ته تکیه مه کوئ، ځکه چې خدمت په خپل چاپېریال پیل کېږي.
کله چې نسبي لارې مهمې وي WorkingDirectory تنظیم کړئ، او چاپېریال په ټرمینل کې د صادرولو پرځای د واحد د ملاتړ شوو لارښوونو له لارې ولېږئ. رازونه په ساتل شوو فایلونو یا اعتبارنامو کې وي، نه په هغو ارګومېنټ لیستونو کې چې ژورنال یې ثبتولی شي.
هغه واحد وګورئ چې واقعاً شته
drop-in فایلونه چلند بدلوي پرته لدې چې هغه فایل ته لاس ووړي چې تاسو یې د سمون یاد لرئ. ولولئ چې مدیر څه پورته کړل او وروستي چل څه راپور کړل.
systemctl cat vpn-helper.service
journalctl -u vpn-helper.service -n 20 --no-pagerد واحد ډمپ drop-in فایلونه د پورته کولو په ترتیب کې لري، او ناڅاپي ExecStart معمولاً له همدې ځایه راځي. له هر بدلون وروسته مدیر بیا پورته کړئ او تایید کړئ چې نوې تعریف هغه څه دی چې systemctl cat چاپوي. ژورنال دقیق کمانډ کرښه او د وتلو حالت ښیي, کوم چې د ارګومېنټ ستونزه د ورک باینري یا د اجازې تېروتنې څخه جلا کوي. بیا پریکړه وکړئ چې مرستندوی د موجوده VPN ژوند دورې پورې اړه لري که باید لاسي تشخیص پاتې شي، ځکه چې دویم شاته تونل بهیر سیال مالک جوړوي.
هغه واحد چې غوښتنې ته سم تولید چاپوي لومړنی ښه پړاو دی. دا لا تونل نه دی، او نه باید ځان تونل ښکاره کړي.