ඊයේ ටනලය ක්‍රියා කළේය, අද උදෑසන unit මළ අතර journal හි Failed at step EXEC spawning /usr/local/bin/vpnclient ඇත. අක්තපත්‍ර, මාර්ග සහ ගිණුම එම වාක්‍යයට කිසිදා නොපැමිණේ. systemd විසින් ExecStart මාර්ගයකට විසඳා, එය ක්‍රියාත්මක කරන ලෙස කර්නලයට ඉල්ලා, කර්නලය ප්‍රතික්ෂේප කළේය, බොහෝ විට එම මාර්ගයේ කිසිවක් නොමැති නිසා හෝ ගොනුව ක්‍රියාත්මක කළ නොහැකි නිසාය. විශ්ලේෂණය කළ විධානය ප්‍රතිවිරුද්ධ බව ඔප්පු කරන තෙක් මෙම දෝෂය ගොනු සහ argv ගැටලුවක් ලෙස සලකන්න.

සත්‍යාපනය ආරම්භ වීමට පෙර EXEC අසාර්ථක වන්නේ ඇයි

systemd ExecStart ෂෙල් එකක් හරහා ක්‍රියාත්මක නොකරයි. එය fork කර, පේළියෙන් තර්ක දෛශිකයක් ගොඩනඟා, පළමු අංගය මත execve අමතයි. එම ඇමතුම අසාර්ථක වුවහොත්, සේවාව කිසිදා VPN සේවාලාභියාගේම කේතයට නොළඟා වේ, එබැවින් පැතිකඩ සංස්කරණය හෝ අක්තපත්‍ර පරීක්ෂාව උපකාර නොකරයි.

තත්ත්ව කේතය මෙම පවුල සාමාන්‍ය කඩාවැටීම්වලින් වෙන් කරයි. status=203/EXEC සමඟ පිටවන unit කිසිදා ක්‍රියාවලියක් ආරම්භ නොකළේය; ආරම්භ වී පසුව status=1 සමඟ පිටවන unit සත්‍යාපනය, DNS හෝ මාර්ගගත කිරීමේදී අසාර්ථක වී තිබිය හැකිය. සේවාලාභී ලොගය කියවීමට පෙර කේතය කියවන්න, මන්ද පළමු අවස්ථාවේදී සේවාලාභී ලොගය හිස් වනු ඇත.

journal හි ඇති මාර්ගය systemd භාවිත කළ මාර්ගයයි, ඔබ සංස්කරණය කළ මාර්ගය විය යුතුම නැත. Drop-in ගොනු සහ උත්පාදක ප්‍රතිදානය සැපයුම්කරුගේ ගොනුව අභිබවා යා හැක, සහ පැරණි daemon-reload පැරණි පේළිය මතකයේ තබයි. එබැවින් පළමු රෝග නිර්ණය ඔබට මතක වෙනස් කළ ගොනුව විවෘත කිරීම නොව, systemd වෙතින් එය විධානය කුමක් ලෙස සලකයි දැයි ඇසීමයි.

ද්විමය ගොනුවේ මාර්ගය ලියා ඇති ස්ථාන තුන

බෙදාහැරීමේ පැකේජයකින්, සැපයුම්කරුගේ ස්ක්‍රිප්ටයකින් සහ නිකුතු tarball එකකින් ස්ථාපිත VPN සේවාලාභියා විවිධ උපසර්ග තුනකට වැටිය හැක. unit, වරප්‍රසාද රීතිය සහ ස්ථාපකය එක් එක් උපසර්ගයක් සටහන් කළ අතර, තුනෙන් දෙකක් නොගැළපෙන විට දෝෂය දිස්වේ.

RecordCommon valueHow to read it
Unit or drop-in/usr/local/bin/vpnclientsystemctl cat vpnclient.service
Installed binary/usr/bin/vpnclientcommand -v vpnclient, then ls -l the result
Sudoers grant/opt/vpnclient/bin/vpnclientsudo grep -r vpnclient /etc/sudoers.d/

නිශ්චිත නොගැළපීමක් මෙසේ දිස්වේ: සැපයුම්කරුගේ ස්ක්‍රිප්ටය /usr/local/bin වෙත ස්ථාපනය කරයි, tarball /opt යටතේ විවෘත කර ඇත, සහ unit තවමත් පෙර පැකේජයේ පැරණි /usr/bin මාර්ගය සඳහන් කරයි. එම ගොනුවලින් එකක් පමණක් පවතී, සහ එය ExecStart හි ඇති ගොනුව වීම දුර්ලභය.

කිසිදු ගොනුවක් වෙනස් කිරීමට පෙර කුමන මාර්ගය කැනොනිකල් දැයි තීරණය කරන්න. ද්විමය ගොනුව බෙදාහැරීමේ පැකේජයට අයත් නම්, පැකේජ මාර්ගය කැනොනිකල් වන අතර unit එය අනුගමනය කළ යුතුය. සැපයුම්කරුගේ ස්ක්‍රිප්ටයට අයත් නම්, එම රීතියම සැපයුම්කරුගේ උපසර්ගයට අදාළ වේ. උපසර්ග අතර ද්විමය ගොනුව පිටපත් කිරීම ඊළඟ යාවත්කාලීනයේදී වෙන් වන පිටපත් දෙකක් සාදයි.

උධෘත ලකුණු තුළ ඇති විධානය ගොනු නාමයක් වන විට

දෙවන අසාර්ථක ආකාරය එම journal පේළිය පිටුපස සැඟවී ඇත. කෙනෙක් මෙය unit එකට ලියා, ඇරඹුමේදී සේවාලාභියා සම්බන්ධ වනු ඇතැයි අපේක්ෂා කරයි:

ExecStart=/usr/bin/"vpnclient connect office"

systemd අගය වචනවලට බෙදයි, එබැවින් පළමු වචනය /usr/bin/vpnclient connect office බවට පත් වේ, උධෘත ලකුණු කාණ්ඩකරණ වාක්‍ය ව්‍යූහයක් ලෙස ඉවත් වේ. පසුව කර්නලය නාමයේ හිස්තැන් ඇති ගොනුවක් සොයයි, එවැන්නක් නොමැත. ද්විමය ගොනුව ස්ථාපිතව තිබියදීත් දෝෂය නැති වූ ද්විමය ගොනුවක් මෙන්මය.

සහාය දක්වන ආකෘතිය වන්නේ සැබෑ ක්‍රියාත්මක කළ හැකි ගොනුවක්, පසුව වෙන් වූ තර්ක, උදාහරණයක් ලෙස ExecStart=/usr/bin/vpnclient connect office. කාර්ය ප්‍රවාහයට සැබවින්ම නල මාර්ගයක් හෝ දාමයක් අවශ්‍ය නම්, එය ස්ක්‍රිප්ටයක තබා ස්ක්‍රිප්ටය අමතන්න, මන්ද ExecStart හට && නොමැත, නල නොමැත, glob විස්තරණය නොමැත.

ගොනු පද්ධතිය නොව, unit නවතන්න

පෙළඹවීමේ පිළියම වන්නේ අපේක්ෂිත මාර්ගයේ සිට සැබෑ ද්විමය ගොනුව දක්වා සංකේතාත්මක සබැඳියකි. එය ක්‍රියා කරන්නේ පැකේජය යාවත්කාලීන වී සබැඳිය ඉවත් කළ ගොනුවකට යොමු වන තෙක්, හෝ SELinux ලේබලයක් ඉලක්කයට නොගැළපෙන තෙක්ය. unit එක drop-in එකක් හරහා සංස්කරණය කිරීම වඩා හොඳය, එවිට සැපයුම්කරුගේ ගොනුව ස්පර්ශ නොවී රැඳෙන අතර යාවත්කාලීන අනුමාන කළ හැකි වේ.

වරප්‍රසාද රීතිය එම මාර්ගයට සහ එම උප විධානවලට ගැළපිය යුතුය. /usr/local/bin/vpnclient සඳහා sudoers සටහන /usr/bin/vpnclient අවසර නොදේ, සහ සෑම තර්කයකටම අවසර දෙන සටහනක් ඕනෑම දේශීය ක්‍රියාවලියකට ටනලය නැවත වින්‍යාස කිරීමට හෝ නැවැත්වීමට ඉඩ දෙයි. unit හට අවශ්‍ය ක්‍රියා දෙක ලබා දෙන්න, සේවාව නැවැත්වීම දැනටමත් අතුරුමුහුණත වසා දමන්නේ නම් ගැලවීම ඉන් පිටත තබන්න.

මෙහිදී සැසඳීම ප්‍රතිඵල දෙයි: unit, පැකේජ දත්ත සමුදාය සහ sudoers සියල්ලම එක් මාර්ගයක් නම් කළ යුතුය. එසේ වූ විට, නැවත ඇරඹීමකින් තොරව සහ තෙවන ස්ථානයේ ද්විමය ගොනුවේ පිටපතකින් තොරව EXEC දෝෂය අතුරුදහන් වේ.

නැවත ඇරඹීමට පෙර විශ්ලේෂිත විධානය ඔප්පු කරන්න

sudo systemctl daemon-reload
sudo systemctl cat vpnclient.service
systemctl show -p ExecStart vpnclient.service
systemd-analyze verify /etc/systemd/system/vpnclient.service
sudo systemctl restart vpnclient.service
systemctl status vpnclient.service --no-pager

systemctl show තීරණාත්මක ප්‍රතිදානයයි, මන්ද එය systemd සැබවින්ම විශ්ලේෂණය කළ argv, ඕනෑම drop-in ඇතුළුව මුද්‍රණය කරයි. systemd-analyze verify ඔබ නැවත ආරම්භ කිරීමට පෙර නැති හෝ ක්‍රියාත්මක කළ නොහැකි මාර්ගයක් අල්ලා ගනී, සහ නැවත ආරම්භයෙන් පසු status විධානය ක්‍රියාවලිය දැන් පවතී දැයි පවසයි.

unit ආරම්භ වී පසුව අසාර්ථක වුවහොත්, ඔබ EXEC පවුල හැර දමා සේවාලාභියාගේම දෝෂ හසුරුවීමට ඇතුළු වී ඇත. journal හි සේවාලාභියාගේ පණිවිඩය සොයන්න, තවත් execve අසාර්ථකත්වයක් නොව. unit diff සහ sudoers diff වෙනස්කම් වාර්තාවේ එකට තබන්න, ඊළඟ යාවත්කාලීනය වෙන් වූ මාර්ගය නිශ්ශබ්දව නැවත නොගෙන එන පරිදි.

අදාළ ලිපි