បញ្ជីអត្ថបទ
ការគាំង Apache2 ញឹកញាប់ ឬការបរាជ័យក្នុងការចាប់ផ្តើមឡើងវិញដោយស្វ័យប្រវត្តិរបស់ Monit នៅក្នុងបរិស្ថាន HestiaCP ? អត្ថបទនេះផ្តល់នូវការណែនាំជាក់ស្តែងមួយដើម្បីជៀសវាងកំហុសទូទៅនៅពេលត្រួតពិនិត្យ Apache2 ជាមួយ Monit ដោយវិភាគយ៉ាងស៊ីជម្រៅអំពីបញ្ហាទូទៅដូចជាការមិនត្រឹមត្រូវនៃផ្លូវ PID និងការរារាំងការអនុញ្ញាត និងការផ្តល់ជូនឯកសារកំណត់រចនាសម្ព័ន្ធស្វ័យប្រវត្តិកម្ម Monit កម្រិតផលិតកម្ម។ ស្ទាត់ជំនាញបច្ចេកទេសថែទាំម៉ាស៊ីនមេដែលមានភាពអាចរកបានខ្ពស់ឥឡូវនេះ ហើយសម្រេចបាននូវការស្តារឡើងវិញដោយស្វ័យប្រវត្តិកម្រិតទីពីរពីការបរាជ័យ!
ចំណុចខ្វះខាតដែលខ្ញុំបានជួបប្រទះពេលកំពុងប្រើ Monit ដើម្បីត្រួតពិនិត្យ Apache2
កាលពីថ្ងៃសុក្រសប្តាហ៍មុន ម៉ាស៊ីនមេបានផ្តល់ឱ្យខ្ញុំនូវការជូនដំណឹង Monit នៅពាក់កណ្តាលអធ្រាត្រ។
ខ្ញុំបានសម្លឹងមើលបន្ទះដោយងឿងឆ្ងល់ ហើយនៅក្នុងជួរឈរស្ថានភាព apache2 មានសញ្ញា Timeout ពណ៌ក្រហម។

ខ្ញុំបានគិតអំពីវាមួយសន្ទុះ។ ខ្ញុំទើបតែបន្ថែមការត្រួតពិនិត្យ Monit ទៅក្នុងម៉ាស៊ីនមេក្នុងពេលថ្ងៃ ហើយខ្ញុំបានចម្លង និងបិទភ្ជាប់ការកំណត់រចនាសម្ព័ន្ធពីការបង្រៀនតាមអ៊ីនធឺណិត។ មិនគួរមានបញ្ហាអ្វីទេ មែនទេ?
នៅព្រឹកបន្ទាប់ វាអស់ពេលម្តងទៀត។ បន្ទាប់ពីលើកទីបី ម៉ូនីទ័រគ្រាន់តែបោះបង់ ហើយបន្ទះបង្ហាញ "មិនត្រូវបានត្រួតពិនិត្យ"។
ខ្ញុំ...
ខ្ញុំសារភាពថា ដំបូងឡើយខ្ញុំមិនបានយកចិត្តទុកដាក់ចំពោះវាទេ។ ការត្រួតពិនិត្យ Apache2? អ្នកអាចរកឃើញការកំណត់រចនាសម្ព័ន្ធគំរូជាច្រើននៅលើអ៊ីនធឺណិត គ្រាន់តែចម្លងនិងបិទភ្ជាប់។ ប៉ុន្តែដំណើរការបិទភ្ជាប់នោះពិតជាធ្វើឱ្យខ្ញុំខឹងសម្បារយ៉ាងខ្លាំង។
មូលហេតុចម្បងនៃជម្លោះរវាងស្ថាបត្យកម្មលំនាំដើមរបស់ HestiaCP និងច្រក Monit
ដំបូងខ្ញុំសូមបង្ហាញអ្នកពីការកំណត់រចនាសម្ព័ន្ធដែលបង្កបញ្ហាច្រើនដល់ខ្ញុំ ដូច្នេះអ្នកអាចមើលឃើញថាតើវាដូចគ្នាបេះបិទទៅនឹងកំណែដែលអ្នកបានឃើញឬអត់។
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វាហាក់ដូចជាល្អមែនទេ? វាពិនិត្យមើលច្រក 80 ហើយប្រសិនបើវាគាំង វានឹងចាប់ផ្តើមឡើងវិញ។ ប្រសិនបើវានៅតែគាំងបន្ទាប់ពីចាប់ផ្តើមឡើងវិញ 5 ដង វានឹងអស់ពេល។
បញ្ហាគឺថា Apache2 របស់អ្នកមិនដំណើរការលើច្រក 80 ទេ។
នេះគឺជាអន្ទាក់មួយរបស់ HestiaCP ហើយក៏ជាមូលហេតុចម្បងដែលធ្វើឲ្យមនុស្សជាច្រើនធ្លាក់ចូលក្នុងវា។ ស្ថាបត្យកម្មលំនាំដើមរបស់ HestiaCP គឺជាប្រូកស៊ីបញ្ច្រាសរបស់ Nginx + Apache2 ដោយ Nginx កាន់កាប់ច្រក 80 និង 443 នៅខាងមុខ ហើយ Apache2 ដំណើរការលើច្រកក្នុងស្រុក 8081 នៅខាងក្រោយ។
ប្រសិនបើអ្នកសុំឱ្យ Monit ស៊ើបអង្កេតភាពរស់រវើករបស់ Apache2 នៅលើច្រក 80 វាដូចជាការទៅ McDonald's ដើម្បីរក KFC។ អ្នកបម្រើមើលមកអ្នកដោយទទេៗ ហើយអ្នកទាំងពីរសម្លឹងមើលគ្នាទៅវិញទៅមក។ នៅទីបញ្ចប់ Monit កំណត់ថាអ្នកកំពុងបិទ ហើយចាប់ផ្តើមឡើងវិញដោយអន្ទះសារ។
បន្ទាប់ពីចាប់ផ្តើមឡើងវិញ ច្រកនៅតែជា 8081។ បន្ទាប់មក Monit ព្យាយាមស៊ើបអង្កេតច្រក 80 ដែលក៏បរាជ័យដែរ ដូច្នេះវាចាប់ផ្តើមឡើងវិញម្តងទៀត។ វដ្តនេះធ្វើម្តងទៀតរហូតដល់ Monit សម្រេចចិត្តថាវាមិនអាចជួសជុលបាន ហើយផុតកំណត់។
ពេលខ្ញុំជួបប្រទះរឿងនេះដំបូង ខ្ញុំពិតជាភ្ញាក់ផ្អើលណាស់។ ក្នុងចំណោមការបង្រៀនទាំងដប់ដែលខ្ញុំបានរកឃើញតាមអ៊ីនធឺណិត មានប្រាំបួនដែលប្រើច្រក 80។ ប្រសិនបើអ្នកធ្វើតាមពួកវា បញ្ហាមិនមែនស្ថិតនៅជាមួយអ្នកទេ ប៉ុន្តែស្ថិតនៅប្រភពព័ត៌មានខ្លួនឯង។

ឯកសារ Apache2 PID ដែលខូចបានបណ្តាលឱ្យ Monit កំណត់អត្តសញ្ញាណដំណើរការដោយច្រឡំថាមិនមាន។
បន្ទាប់ពីផ្លាស់ប្តូរច្រកពី 80 ទៅ 8081 តាមទ្រឹស្តី Monit គួរតែអាចរកឃើញវាបាន មែនទេ?
ទោះយ៉ាងណាក៏ដោយ តាមពិតទៅ វានៅតែរាយការណ៍ម្តងម្កាលថា "ការប្រតិបត្តិ បរាជ័យ "។
បន្ទាប់ពីតស៊ូអស់រយៈពេលយូរ ទីបំផុតខ្ញុំបានរកឃើញថាមូលហេតុគឺសាមញ្ញ៖ ឯកសារ PID ខូច។
សូមគិតអំពីវា Monit កំពុងចាប់ផ្តើម Apache2 ឡើងវិញដោយអន្ទះសារ រាល់ពេលវាបង្ខំឱ្យបិទ និងចាប់ផ្តើមវាឡើងវិញ ដោយធ្វើឡើងវិញច្រើនដង។ ក្នុងអំឡុងពេលដំណើរការនេះ ឯកសារ /var/run/apache2/apache2.pid អាចក្លាយជា 0 បៃ។
ម្យ៉ាងទៀត ឯកសារនៅតែមាន ប៉ុន្តែវាទទេ។
នៅពេលដែល Monit អានឯកសារនេះ វារកមិនឃើញអ្វីទាំងអស់។ វាមិនស្គាល់ Apache2 របស់អ្នកទេ ទោះបីជា Apache2 របស់អ្នកដំណើរការល្អឥតខ្ចោះនៅផ្ទៃខាងក្រោយក៏ដោយ។ Monit មិនគិតថាដំណើរការនេះមានទេ។
ពេលខ្ញុំឃើញបែបនេះ ខ្ញុំក៏និយាយមិនចេញមួយសន្ទុះ។
នេះគឺជាការជាប់គាំង។ Monit បរាជ័យក្នុងការរកឃើញឧទាហរណ៍ Apache 2 ចាប់ផ្តើម Apache2 ឡើងវិញ ធ្វើឱ្យខូចឯកសារ PID ក្នុងអំឡុងពេលដំណើរការចាប់ផ្តើមឡើងវិញ បរាជ័យក្នុងការរកឃើញលើកក្រោយ ហើយចាប់ផ្តើមឡើងវិញម្តងទៀត។ វដ្តនេះបន្តរហូតដល់ការអស់ពេលកើតឡើង។
ជំហានដោះស្រាយបញ្ហា និងជួសជុលសម្រាប់ការត្រួតពិនិត្យ Apache2 នៅក្នុងបរិស្ថាន HestiaCP
និយាយឱ្យត្រង់ទៅ ដំណើរការស៊ើបអង្កេតមិនស្មុគស្មាញទេ ប៉ុន្តែអ្នកត្រូវដឹងថាត្រូវស៊ើបអង្កេតទិសដៅណា។
ជំហានដំបូងគឺត្រូវកំណត់ថាច្រកណាដែល 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វាត្រូវបានបញ្ជាក់ថាជា 8081 មិនមែន 80 ទេ។ នោះជាឫសគល់នៃបញ្ហា។
ជំហានទីពីរគឺជួសជុលឯកសារ PID ដែលខូច។ វិធីនេះសាមញ្ញជាង។
monit unmonitor apache2
systemctl restart apache2
cat /var/run/apache2/apache2.pidដំបូង សូមផ្អាកការត្រួតពិនិត្យ Monit ដើម្បីការពារវាពីការជ្រៀតជ្រែក ខណៈពេលដែលអ្នកកំពុងជួសជុលវា។ បន្ទាប់មក ចាប់ផ្តើម Apache2 ឡើងវិញ ដើម្បីអនុញ្ញាតឱ្យវាសរសេរ PID ស្អាតឡើងវិញ។ ជាចុងក្រោយ សូមប្រើ `cat` ដើម្បីពិនិត្យមើលខ្លឹមសារឯកសារ។ វាគួរតែមានខ្សែអក្សរលេខ មិនមែនខ្សែអក្សរទទេទេ។
នៅពេលដែលជំហាននេះត្រូវបានបញ្ចប់ បញ្ហាត្រូវបានដោះស្រាយជាទូទៅ។

ការវិភាគប្រៀបធៀបនៃការកំណត់រចនាសម្ព័ន្ធការពារបែបប្រពៃណីរបស់ Monit ដែលសម្របខ្លួន និងការពារបែបឈ្លានពាន
ការបង្រៀនតាមអ៊ីនធឺណិតអំពីការកំណត់រចនាសម្ព័ន្ធ Apache2 ជាមួយ Monit ជាទូទៅត្រូវបានបែងចែកជាពីរប្រភេទ។
ប្រភេទមួយគឺ "ប្រភេទសម្របខ្លួនបែបប្រពៃណី" ដែលប្រើពាក្យបញ្ជា `service` ដើម្បីគ្រប់គ្រងសេវាកម្ម និងពិនិត្យមើលច្រកក្នុងស្រុកដោយមិនចាំបាច់បន្ថែមការរឹតបន្តឹងស្មុគស្មាញច្រើនពេក។ ការកំណត់រចនាសម្ព័ន្ធនេះអាចត្រូវបានប្រើនៅលើ HestiaCP ដោយគ្រាន់តែផ្លាស់ប្តូរច្រក ហើយវាមានស្ថេរភាព។
វិធីសាស្រ្តមួយទៀតគឺវិធីសាស្រ្ត "ការការពារយ៉ាងសកម្ម" ដែលប្រើ systemctl ដើម្បីគ្រប់គ្រងសេវាកម្ម បន្ថែមការរឹតបន្តឹងដំណើរការកុមារ និងប្រើប្រាស់តក្កវិជ្ជារកឃើញដ៏តឹងរ៉ឹងជាងមុន។ វាមើលទៅអស្ចារ្យណាស់ ប៉ុន្តែវាមានគុណវិបត្តិធ្ងន់ធ្ងរ៖ ពាក្យបញ្ជាបញ្ឈប់ដែលប្រើគឺ `killall -9`។
តើ `killall -9` មានន័យដូចម្តេច? វាមានន័យថា បង្ខំឲ្យឧបករណ៍នោះបិទដោយមិនគិតពីអ្វីដែលវាកំពុងធ្វើនោះទេ។ ប្រតិបត្តិការ brute-force នេះអាចបន្សល់ទុកឯកសារ PID ដែលខូចយ៉ាងងាយស្រួល ដែលជាបញ្ហាដែលខ្ញុំទើបតែបានលើកឡើង។
បទពិសោធន៍ផ្ទាល់ខ្លួនរបស់ខ្ញុំគឺថា ការកំណត់ចំនួនដំណើរការកូនក្នុងការកំណត់រចនាសម្ព័ន្ធដ៏ខ្លាំងក្លាពិតជាមានប្រយោជន៍។ នៅពេលដែល Apache2 របស់អ្នកត្រូវបានវាយប្រហារដោយ CC ការកំណត់ចំនួនដំណើរការកូនអាចការពារម៉ាស៊ីនមេពីការអស់អង្គចងចាំ។ ទោះជាយ៉ាងណាក៏ដោយ វិធីសាស្រ្ត `killall -9` គឺពិតជាមិនអាចប្រើបានទេ។
ដូច្នេះនៅទីបញ្ចប់ ខ្ញុំបានសម្របសម្រួល និងបញ្ចូលគុណសម្បត្តិនៃការកំណត់រចនាសម្ព័ន្ធទាំងពីរ។
ការកំណត់រចនាសម្ព័ន្ធការអនុវត្តល្អបំផុតរបស់ HestiaCP Apache2 Monit
កែប្រែឯកសារ /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សូមឲ្យខ្ញុំពន្យល់ដោយសង្ខេបអំពីតក្កវិជ្ជានៅពីក្រោយបន្ទាត់កំណត់រចនាសម្ព័ន្ធទាំងនេះ។
សរសេរច្រក 8081 ដើម្បីផ្គូផ្គងយ៉ាងច្បាស់លាស់នូវស្ថាបត្យកម្មប្រូកស៊ីបញ្ច្រាសរបស់ HestiaCP; ឈប់សរសេរច្រក 80 ដោយល្ងង់ខ្លៅទៀត។
ប្រើពាក្យបញ្ជា `systemctl stop` ជំនួសឲ្យពាក្យបញ្ជា `killall -9` ដើម្បីបញ្ឈប់ឯកសារ PID ដើម្បីកុំឲ្យវាខូច។
ដែនកំណត់ដំណើរការកូនត្រូវបានបន្ថែម៖ ប្រសិនបើចំនួនកូនលើសពី 120 ដំណើរការនឹងចាប់ផ្តើមឡើងវិញបន្ទាប់ពីវដ្តជាប់ៗគ្នាពីរ ដើម្បីការពារការវាយប្រហារ CC ប៉ុន្តែវាមិនឈ្លានពានពេកទេ។
តក្កវិជ្ជាសម្រាប់ការរកឃើញការបរាជ័យត្រូវបានកែប្រែដើម្បីប្រើវិធីសាស្រ្ត "សម្រាប់ 2 វដ្ត" មានន័យថាការចាប់ផ្តើមឡើងវិញត្រូវបានបង្កឡើងតែបន្ទាប់ពីការបរាជ័យពីរជាប់ៗគ្នាប៉ុណ្ណោះ ដែលកាត់បន្ថយលទ្ធផលវិជ្ជមានមិនពិត។ ការកំណត់រចនាសម្ព័ន្ធមុន ដែលបានចាប់ផ្តើមឡើងវិញបន្ទាប់ពីការរកឃើញតែមួយដង គឺពិតជាមានភាពរសើបខ្លាំងពេក។
កម្រិតពេលវេលាអស់ចុងក្រោយត្រូវបានបន្ធូរបន្ថយមកត្រឹម 5 ដងនៃការចាប់ផ្ដើមឡើងវិញក្នុងរយៈពេល 10 វដ្ត ដោយទុកឲ្យមានការអត់ឱនចំពោះកំហុសគ្រប់គ្រាន់។
HestiaCP ការត្រួតពិនិត្យតាមដានសេចក្តីសង្ខេបអំពីការដោះស្រាយបញ្ហាការកំណត់រចនាសម្ព័ន្ធ និងការចែករំលែកបទពិសោធន៍
បន្ទាប់ពីធ្វើការផ្លាស់ប្តូរការកំណត់រចនាសម្ព័ន្ធរួច ខ្ញុំបានត្រួតពិនិត្យ apache2 ហើយបន្ទះនេះបានបង្ហាញសូចនាករ "យល់ព្រម" ពណ៌បៃតង។
តើខ្ញុំត្រូវពណ៌នាអំពីអារម្មណ៍របស់ខ្ញុំនៅពេលនោះយ៉ាងដូចម្តេច? វាដូចជាការចំណាយពេលពីរថ្ងៃដើម្បីតស៊ូជាមួយនឹងកំហុសមួយ ប៉ុន្តែដើម្បីដឹងថាមូលហេតុគឺជាការកំណត់រចនាសម្ព័ន្ធតែមួយគត់ដែលមិនត្រឹមត្រូវ។ វាទាំងធ្វើឲ្យខ្ញុំខកចិត្ត និងអស់សំណើច។
Monit គឺជារឿងល្អមួយនៅក្នុងខ្លួនវា ហើយ daemons ត្រួតពិនិត្យគឺជាអ្វីដែលម៉ាស៊ីនមេគ្រប់រូបគួរធ្វើ។ ប៉ុន្តែបញ្ហាគឺថាការបង្រៀនតាមអ៊ីនធឺណិតជាច្រើនគឺផ្អែកលើការសន្មត់ថា "Apache2 ប្រើច្រក 80 ទាំងស្រុង" ខណៈពេលដែល HestiaCP ប្រើប្រូកស៊ីបញ្ច្រាស ដែលមានន័យថាការសន្មត់នេះមិនពិតទេ។
ប្រសិនបើអ្នកធ្វើតាមការណែនាំ បញ្ហាមិនមែនស្ថិតនៅលើអ្នកទេ វាគឺថាការបង្រៀននេះអាចអនុវត្តបានចំពោះសេណារីយ៉ូផ្សេងពីរបស់អ្នក។
ដូច្នេះប្រសិនបើអ្នកកំពុងប្រើ HestiaCP ហើយលេងជាមួយ Monit ដើម្បីត្រួតពិនិត្យ Apache2 សូមចងចាំរឿងពីរយ៉ាង៖ ផ្លាស់ប្តូរច្រកទៅ 8081 ហើយប្រើពាក្យបញ្ជា `systemctl` ដើម្បីបញ្ឈប់វា មិនមែន `killall -9` ទេ។ ប្រសិនបើអ្នកធ្វើរឿងទាំងពីរនេះ អ្នកគួរតែអាចជៀសវាងបញ្ហាបន្ថែមទៀត។
ដោយសារអ្នកបានអានដល់ចំណុចនេះ ប្រសិនបើអ្នកយល់ថាវាមានប្រយោជន៍ សូមចូលចិត្ត និងចែករំលែកវា។ ប្រសិនបើអ្នកចង់ទទួលបានព័ត៌មានថ្មីៗមុនគេ អ្នកក៏អាចតាមដានខ្ញុំបានដែរ!
សូមអរគុណសម្រាប់ការអានអត្ថបទរបស់ខ្ញុំ។ ជួបគ្នាពេលក្រោយ។
សង្ឃឹមថា អត្ថបទ "HestiaCP Apache2 មានបញ្ហាញឹកញាប់មែនទេ? មគ្គុទ្ទេសក៍ត្រួតពិនិត្យ និងដោះស្រាយបញ្ហាដោយស្វ័យប្រវត្តិ (ជាមួយនឹងការកំណត់រចនាសម្ព័ន្ធពេញលេញ)" ដែលបានចែករំលែកនៅលើ ប្លក់របស់ Chen Weiliang ( https://www.chenweiliang.com/ ) នឹងមានប្រយោជន៍សម្រាប់អ្នក។
សូមចែករំលែកតំណភ្ជាប់អត្ថបទនេះ៖ https://www.chenweiliang.com/cwl-34457.html
