ලිපි නාමාවලිය
HestiaCP පරිසරවල නිතර Apache2 බිඳ වැටීම් හෝ Monit ස්වයංක්රීයව නැවත ආරම්භ කිරීමේ අසාර්ථකත්වයන්? මෙම ලිපිය Monit සමඟ Apache2 නිරීක්ෂණය කිරීමේදී, PID මාර්ගය වැරදි ලෙස සකස් කිරීම සහ අවසර අවහිර කිරීම වැනි පොදු ගැටළු ගැඹුරින් විශ්ලේෂණය කිරීමේදී සහ නිෂ්පාදන ශ්රේණියේ Monit ස්වයංක්රීයකරණ වින්යාස ගොනු පිරිනැමීමේදී පොදු වැරදි වළක්වා ගැනීම සඳහා ප්රායෝගික මාර්ගෝපදේශයක් සපයයි. දැන් ඉහළ ලබා ගත හැකි සේවාදායක නඩත්තු ශිල්පීය ක්රම ප්රගුණ කර අසාර්ථකත්වයන්ගෙන් දෙවන මට්ටමේ ස්වයංක්රීය ප්රතිසාධනයක් ලබා ගන්න!
Apache2 නිරීක්ෂණය කිරීමට Monit භාවිතා කරන අතරතුර මා මුහුණ දුන් අනතුරු
ගිය සිකුරාදා, සර්වර් එක මට රෑ මැද මොනිට් අනතුරු ඇඟවීමක් දුන්නා.
මම වික්ෂිප්තව පැනලය දෙස බැලුවෙමි, apache2 තත්ව තීරුවේ රතු පැහැති කාල සීමාවක් තිබුණි.

මම ඒ ගැන ටිකක් හිතුවා. මම දවල්ට සේවාදායකයට Monit monitoring එකතු කළා, ඒ වගේම මම online tutorial එකකින් configuration එක copy කරලා paste කළා. කිසිම ප්රශ්නයක් ඇති වෙන්න හොඳ නෑ නේද?
පසුදා උදෑසන, එය නැවතත් කාලය ඉකුත් විය. තුන්වන වතාවට පසුව, මොනිටරය සරලවම අත්හැර දැමූ අතර, පැනලය "නිරීක්ෂණය නොකෙරේ" යනුවෙන් පෙන්වීය.
මම...
මම පිළිගන්නවා, මම මුලින් ඒක බැරෑරුම් ලෙස සැලකුවේ නැහැ. Apache2 අධීක්ෂණය? ඔබට අන්තර්ජාලයෙන් බොහෝ සැකිලි වින්යාසයන් සොයාගත හැකිය, පිටපත් කර අලවන්න. නමුත් ඒ ඇලවීමේ ක්රියාවලිය ඇත්තටම මාව කෝපයට පත් කළා.
HestiaCP හි පෙරනිමි ගෘහ නිර්මාණ ශිල්පය සහ Monit ports අතර ගැටුමට මූලික හේතුව
මුලින්ම මට මෙතරම් කරදර ඇති කළ වින්යාසය ඔබට පෙන්වන්නම්, එවිට එය ඔබ දැක ඇති අනුවාදයට හරියටම සමාන දැයි ඔබට දැක ගත හැකිය.
check process apache2 with pidfile /var/run/apache2/apache2.pid
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
if failed host 127.0.0.1 port 80 protocol http then restart
if 5 restarts within 5 cycles then timeoutඒක හොඳයි වගේ නේද? ඒක port 80 පරීක්ෂා කරනවා, ඒක crash උනොත් restart වෙනවා. restart 5කට පස්සෙත් crash උනොත්, ඒකෙ වෙලාව ඉවරයි.
ගැටලුව වන්නේ, ඔබගේ Apache2 port 80 හි පවා ක්රියාත්මක නොවීමයි.
මෙය HestiaCP හි එක් උගුලක් වන අතර බොහෝ අය එයට වැටීමට මූලික හේතුවයි. HestiaCP හි පෙරනිමි ගෘහ නිර්මාණ ශිල්පය Nginx + Apache2 හි ප්රතිලෝම ප්රොක්සියක් වන අතර, Nginx ඉදිරියෙන් 80 සහ 443 ports අල්ලාගෙන සිටින අතර Apache2 පිටුපසින් 8081 local port මත ධාවනය වේ.
ඔබ මොනිට්ට port 80 හි Apache2 හි සජීවී බව පරීක්ෂා කිරීමට පැවසුවහොත්, එය KFC සොයා ගැනීමට මැක්ඩොනල්ඩ්ස් වෙත යනවා වැනිය. සේවාදායකයා ඔබ දෙස හිස් බැල්මක් හෙළන අතර, ඔබ දෙදෙනා එකිනෙකා දෙස බලා සිටිති. අවසානයේදී, ඔබ අක්රිය වී ඇති බව මොනිට් තීරණය කර වියරුවෙන් නැවත ආරම්භ කිරීමට පටන් ගනී.
නැවත ආරම්භ කිරීමෙන් පසුව, වරාය තවමත් 8081 වේ. ඉන්පසු මොනිට් 80 වරාය පරීක්ෂා කිරීමට උත්සාහ කරයි, එයද අසාර්ථක වේ, එබැවින් එය නැවත ආරම්භ වේ. මොනිට් එය අලුත්වැඩියා කළ නොහැකි බව තීරණය කර කාලය අවසන් වන තෙක් මෙම චක්රය නැවත සිදු වේ.
මම මුලින්ම මෙය අත්විඳින විට, මම සැබවින්ම මවිතයට පත් වී සිටියෙමි. මට මාර්ගගතව හමු වූ නිබන්ධන දහයෙන් නවයක්ම port 80 භාවිතා කළහ. ඔබ ඒවා අනුගමනය කළේ නම්, ගැටළුව ඔබ සමඟ නොව, තොරතුරු වල මූලාශ්රය සමඟ ය.

දූෂිත Apache2 PID ගොනුවක් නිසා Monit විසින් එම ක්රියාවලිය නොපවතින බව වැරදියට හඳුනා ගන්නා ලදී.
port එක 80 සිට 8081 දක්වා වෙනස් කිරීමෙන් පසු, Monit හට න්යායාත්මකව එය හඳුනා ගැනීමට හැකි විය යුතුයි, හරිද?
කෙසේ වෙතත්, යථාර්ථයේ දී, එය තවමත් ඉඳහිට "ක්රියාත්මක කිරීම අසාර්ථක විය " යනුවෙන් වාර්තා කරයි.
දිගු වේලාවක් අරගල කිරීමෙන් පසු, අවසානයේ මට හේතුව සරල බව වැටහුණා: PID ගොනුව දූෂිත වී තිබුණා.
ඒ ගැන සිතා බලන්න, Monit දැඩි ලෙස Apache2 නැවත ආරම්භ කරමින් සිටියේය, සෑම අවස්ථාවකම බලහත්කාරයෙන් එය මරා දමා නැවත ආරම්භ කරමින්, කිහිප වතාවක් ඉදිරියට සහ පසුපසට ගියේය. මෙම ක්රියාවලිය අතරතුර, /var/run/apache2/apache2.pid ගොනුව බයිට් 0 ක් බවට පත්විය හැකිය.
වෙනත් වචන වලින් කිවහොත්, ගොනුව තවමත් එහි ඇත, නමුත් එය හිස් ය.
Monit මෙම ගොනුව කියවන විට, එයට කිසිවක් සොයාගත නොහැක. ඔබගේ Apache2 පසුබිමේ පරිපූර්ණව ක්රියාත්මක වුවද, එය ඔබගේ Apache2 හඳුනා නොගනී; ක්රියාවලිය පවතින බව Monit සිතන්නේ නැත.
මේක දැක්කම මට එක මොහොතක් ගොළු වුණා.
මෙය අවහිරයකි. මොනිට් Apache 2 අවස්ථාව හඳුනා ගැනීමට අසමත් වේ, Apache2 නැවත ආරම්භ කරයි, නැවත ආරම්භ කිරීමේ ක්රියාවලියේදී PID ගොනුව දූෂිත කරයි, ඊළඟ අනාවරණය අසාර්ථක වී නැවත ආරම්භ වේ. කල් ඉකුත්වීම සිදුවන තෙක් මෙම චක්රය දිගටම පවතී.
HestiaCP පරිසරය තුළ Apache2 අධීක්ෂණය සඳහා දෝශ නිරාකරණය සහ අලුත්වැඩියා පියවර
ඇත්තම කිව්වොත්, විමර්ශන ක්රියාවලිය සංකීර්ණ නැහැ, නමුත් ඔබ විමර්ශනය කළ යුත්තේ කුමන දිශාවටද යන්න දැන සිටිය යුතුයි.
පළමු පියවර වන්නේ ඔබේ Apache2 සවන් දෙන්නේ කුමන වරායේද යන්න තීරණය කිරීමයි. ටර්මිනලයේ විධානයක් ටයිප් කරන්න.
netstat -tulpn | grep apache2විකල්පයක් ලෙස, ඔබට `ss` විධානය භාවිතා කළ හැකිය; බලපෑම සමාන වේ.
ss -tulpn | grep apache2ඔබට මේ හා සමාන ප්රතිදානයක් පෙනෙනු ඇත.
tcp 0 0 127.0.0.1:8081 0.0.0.0:* LISTEN 2942372/apache2ඒක 80 නෙවෙයි, 8081 කියලා තහවුරු වෙලා තියෙනවා. ඒක තමයි ගැටලුවේ මුල.
දෙවන පියවර වන්නේ දූෂිත PID ගොනුව අලුත්වැඩියා කිරීමයි. මෙය සරලයි.
monit unmonitor apache2
systemctl restart apache2
cat /var/run/apache2/apache2.pidපළමුව, ඔබ දේවල් නිවැරදි කරන අතරතුර එය බාධා කිරීමෙන් වැළැක්වීම සඳහා මොනිට් අධීක්ෂණය විරාම කරන්න. ඉන්පසු, පිරිසිදු PID එකක් නැවත ලිවීමට ඉඩ දීම සඳහා Apache2 නැවත ආරම්භ කරන්න. අවසාන වශයෙන්, ගොනු අන්තර්ගතය පරීක්ෂා කිරීමට `cat` භාවිතා කරන්න; එහි හිස් නූලක් නොව සංඛ්යා මාලාවක් අඩංගු විය යුතුය.
මෙම පියවර අවසන් වූ පසු, ගැටළුව මූලික වශයෙන් විසඳනු ලැබේ.

මොනිට් සාම්ප්රදායික අනුවර්තන සහ ආක්රමණශීලී ආරක්ෂක වින්යාසයන්ගේ සංසන්දනාත්මක විශ්ලේෂණය
Monit සමඟ Apache2 වින්යාස කිරීම පිළිබඳ මාර්ගගත නිබන්ධන සාමාන්යයෙන් කාණ්ඩ දෙකකට අයත් වේ.
එක් වර්ගයක් වන්නේ "සාම්ප්රදායික අනුවර්තන වර්ගය" වන අතර, එය සේවා කළමනාකරණය කිරීමට සහ ඕනෑවට වඩා සංකීර්ණ සීමාවන් එකතු නොකර දේශීය වරායන් පරීක්ෂා කිරීමට 'සේවා' විධානය භාවිතා කරයි. මෙම වින්යාසය HestiaCP හි වරාය වෙනස් කිරීමෙන් භාවිතා කළ හැකි අතර එය සාපේක්ෂව ස්ථාවර වේ.
තවත් ප්රවේශයක් වන්නේ "ආක්රමණශීලී ආරක්ෂණ" ක්රමයයි, එය සේවා කළමනාකරණය කිරීමට systemctl භාවිතා කරයි, ළමා ක්රියාවලි සීමා කිරීම් එකතු කරයි, සහ දැඩි හඳුනාගැනීමේ තර්කනය භාවිතා කරයි. එය විශිෂ්ට පෙනුමක් ඇති නමුත් එයට මාරාන්තික දෝෂයක් ඇත: භාවිතා කරන stop විධානය `killall -9` වේ.
`killall -9` යන්නෙන් අදහස් කරන්නේ කුමක්ද? එහි තේරුම උපාංගය කුමක් කළත් බලහත්කාරයෙන් මරා දැමීමයි. මෙම ම්ලේච්ඡ-බල මෙහෙයුම මඟින් දූෂිත PID ගොනු පහසුවෙන් ඉතිරි කළ හැකිය, එය මා දැන් සඳහන් කළ ගැටළුවයි.
මගේ පෞද්ගලික අත්දැකීම නම්, ආක්රමණශීලී වින්යාසයක ළමා ක්රියාවලි ගණන සීමා කිරීම ඇත්තෙන්ම ප්රයෝජනවත් බවයි. ඔබේ Apache2 CC ප්රහාරයකින් යටපත් වූ විට, ළමා ක්රියාවලි ගණන සීමා කිරීමෙන් සේවාදායකයේ මතකය අවසන් වීම වළක්වා ගත හැකිය. කෙසේ වෙතත්, `killall -9` ප්රවේශය සැබවින්ම භාවිතා කළ නොහැක.
ඉතින් අවසානයේ මම සම්මුතියකට පැමිණ වින්යාස දෙකෙහිම වාසි ඒකාබද්ධ කළෙමි.
HestiaCP Apache2 මොනිට් හොඳම පුහුණු වින්යාසය
පහත අන්තර්ගතය සමඟ /etc/monit/conf.d/apache2 ගොනුව වෙනස් කරන්න.
check process apache2 with pidfile /var/run/apache2/apache2.pid
start program = "/bin/systemctl start apache2"
stop program = "/bin/systemctl stop apache2"
if children > 120 for 2 cycles then restart
if failed host 127.0.0.1 port 8081 protocol http for 2 cycles then restart
if 5 restarts within 10 cycles then timeoutමෙම වින්යාස රේඛා කිහිපය පිටුපස ඇති තර්කනය කෙටියෙන් පැහැදිලි කිරීමට මට ඉඩ දෙන්න.
HestiaCP හි ප්රතිලෝම ප්රොක්සි ගෘහ නිර්මාණ ශිල්පයට හරියටම ගැලපෙන පරිදි port 8081 ලියන්න; මෝඩ ලෙස port 80 ලිවීම නවත්වන්න.
PID ගොනුව දූෂිත නොවන පරිදි එය නැවැත්වීමට `killall -9` වෙනුවට `systemctl stop` විධානය භාවිතා කරන්න.
ළමා ක්රියාවලි සීමාවක් එකතු කර ඇත: ළමුන් සංඛ්යාව 120 ඉක්මවන්නේ නම්, CC ප්රහාර වැළැක්වීම සඳහා අඛණ්ඩ චක්ර දෙකකට පසු ක්රියාවලිය නැවත ආරම්භ වේ, නමුත් එය එතරම් ආක්රමණශීලී නොවේ.
අසාර්ථකත්වයන් හඳුනාගැනීමේ තර්කනය "චක්ර 2ක් සඳහා" ප්රවේශයක් භාවිතා කිරීම සඳහා වෙනස් කර ඇත, එනම් නැවත ආරම්භ කිරීම ක්රියාත්මක වන්නේ අඛණ්ඩ අසාර්ථකත්වයන් දෙකකට පසුව පමණක් වන අතර එමඟින් ව්යාජ ධනාත්මක ප්රති results ල අඩු වේ. එක් අනාවරණයකින් පසුව නැවත ආරම්භ වූ පෙර වින්යාසය අවංකවම ටිකක් අධික ලෙස සංවේදී විය.
අවසාන කල් ඉකුත්වීමේ සීමාව චක්ර 10ක් ඇතුළත නැවත ආරම්භ කිරීම් 5ක් දක්වා ලිහිල් කර ඇති අතර, එමඟින් ප්රමාණවත් දෝෂ ඉවසීමක් ඉතිරි වේ.
හෙස්ටියාසීපී නිරීක්ෂණ අධීක්ෂණයවින්යාස දෝශ නිරාකරණ සාරාංශය සහ අත්දැකීම් බෙදාගැනීම
වින්යාස වෙනස්කම් සිදු කිරීමෙන් පසු, මම apache2 නිරීක්ෂණය කළ අතර, අවසානයේ පැනලය හරිත "හරි" දර්ශකයක් පෙන්වීය.
ඒ වෙලාවේ මට දැනුණු හැඟීම් විස්තර කරන්නේ කොහොමද? ඒක හරියට දවස් දෙකක් කෘමීන් එක්ක පොරබදමින් හිටියා වගේ, ඒත් එක පෙළක වින්යාසය වැරදියි කියලා හොයාගත්තා. ඒක කලකිරවන සුළු වගේම හිනා යන සුළු දෙයක්.
මොනිට් එක හොඳ දෙයක්, ඒ වගේම ඩීමන් නිරීක්ෂණය කිරීම සෑම සේවාදායකයෙක්ම කළ යුතු දෙයක්. නමුත් ගැටළුව වන්නේ බොහෝ මාර්ගගත නිබන්ධන පදනම් වී ඇත්තේ "Apache2 තනිකරම port 80 භාවිතා කරයි" යන උපකල්පනය මත වන අතර HestiaCP ප්රතිලෝම ප්රොක්සියක් භාවිතා කරයි, එයින් අදහස් වන්නේ මෙම උපකල්පනය සත්ය නොවන බවයි.
ඔබ උපදෙස් අනුගමනය කරන්නේ නම්, ගැටලුව ඔබ නොවේ; ඒ නිබන්ධනය ඔබේ එකට වඩා වෙනස් අවස්ථාවකට අදාළ වීමයි.
ඉතින් ඔබත් HestiaCP භාවිතා කරනවා නම් සහ Apache2 නිරීක්ෂණය කිරීමට Monit සමඟ කටයුතු කරනවා නම්, කරුණු දෙකක් මතක තබා ගන්න: port එක 8081 ලෙස වෙනස් කරන්න, සහ එය නැවැත්වීමට `killall -9` නොව `systemctl` විධානය භාවිතා කරන්න. ඔබ මේ දේවල් දෙක කරන්නේ නම්, ඔබට තවත් ගැටළු වළක්වා ගැනීමට හැකි විය යුතුය.
මෙච්චර දුරක් කියවලා ඉවර නිසා, මේක ප්රයෝජනවත් කියලා හිතුනනම් like කරලා share කරන්න. මුලින්ම updates ලබා ගන්න කැමති නම්, මාව follow කරන්නත් පුළුවන්!
මගේ ලිපිය කියෙව්වට ස්තූතියි. ඊළඟ වතාවේ හමුවෙමු.
චෙන් වෙයිලියැන්ග්ගේ බ්ලොග් අඩවියේ ( https://www.chenweiliang.com/ ) බෙදාගත් "HestiaCP Apache2 නිතර බිඳ වැටීම්? ස්වයංක්රීය අධීක්ෂණ සහ දෝශ නිරාකරණ මාර්ගෝපදේශය නිරීක්ෂණය කරන්න" යන ලිපිය ඔබට ප්රයෝජනවත් වනු ඇතැයි අපි බලාපොරොත්තු වෙමු.
මෙම ලිපියේ සබැඳිය බෙදා ගැනීමට නිදහස් වන්න: https://www.chenweiliang.com/cwl-34457.html
