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.serviceshell තර්කනය ස්ක්රිප්ටයක තබන්න
සහායකයෙකුට සැබවින්ම කොන්දේසි සහගත තර්කනය අවශ්ය වූ විට, එම තර්කනය ස්ක්රිප්ටයක තබා එය පැහැදිලිව කැඳවන්න. ස්ක්රිප්ටයට අන්තර්කාරක පේළියක්, ක්රියාත්මක කිරීමේ අවසරයක් සහ සේවාවට වාර්තා කළ හැකි පිටවීම් කේත අවශ්ය වේ. /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 ජීවන චක්රයට අයත්ද නැතහොත් අතින් කරන රෝග විනිශ්චයක් ලෙස රැඳිය යුතුද යන්න තීරණය කරන්න, මන්ද දෙවන පසුබිම් උමං ක්රියාවලියක් තරඟකාරී හිමිකරුවෙකු නිර්මාණය කරයි.
ඉල්ලුමට සරිලන පරිදි නිවැරදි ප්රතිදානය මුද්රණය කරන ඒකකය හොඳ පළමු සන්ධිස්ථානයකි. එය තවම උමං මාර්ගයක් නොවේ, උමං මාර්ගයක් ලෙස රඟපෑම නොකළ යුතුය.