ម៉ាស៊ីនត្រួតពិនិត្យរបស់យើងបានចាប់ផ្តើមសេវាកម្មឡើងវិញ ដែលយើងបានបញ្ឈប់ដោយចេតនា
ប្រតិបត្តិការ
ម៉ាស៊ីនត្រួតពិនិត្យមួយក្នុងចំណោមម៉ាស៊ីនត្រួតពិនិត្យរបស់យើង ចាប់ផ្តើមសេវាកម្មណាមួយរបស់យើង ដែលបានបើកដំណើរការ (enabled) ប៉ុន្តែមិនកំពុងដំណើរការ។ ពីរដងនៅខែតុលា វាបានចាប់ផ្តើមសេវាកម្មដែលយើងបានបញ្ឈប់ដោយចេតនា។ លើកទីពីរ ភ្ញៀវទស្សនាមួយក្នុងចំណោមគេហទំព័ររបស់យើង បានជួបប្រទះកំហុសរយៈពេលប្រហែល 45 នាទី។
ហេតុអ្វីបានជាម៉ាស៊ីនត្រួតពិនិត្យនោះមានវត្តមាន
សេវាកម្មមួយដែលចាកចេញដោយរលូននៅពេលវាទទួលបាន SIGTERM ឧទាហរណ៍ ដោយសារអ្វីមួយបានសម្លាប់វាតាមឈ្មោះ មិនត្រូវបានចាត់ទុកថា "failed" ទេ តាមការពិចារណារបស់ systemd។ Restart=on-failure មិននាំវាត្រឡប់មកវិញទេ ហើយ systemctl --failed ក៏មិនបញ្ជីវាដែរ។ វានៅតែបិទ រហូតដល់មានអ្នកចៃដន្យកត់សម្គាល់។ ដូច្នេះ ម៉ាស៊ីនត្រួតពិនិត្យស្វែងរកសេវាកម្មដែលបានបើកដំណើរការ (enabled) ប៉ុន្តែមិនកំពុងដំណើរការ ហើយចាប់ផ្តើមពួកវា។
បញ្ហាគឺថា សេវាកម្មដែលអ្នកបានបញ្ឈប់ដោយដៃ មើលទៅដូចគ្នាបេះបិទ។
លើកទីមួយ
នៅថ្ងៃទី 7 ខែតុលា យើងបានបញ្ឈប់កម្មវិធីប្រព្រឹត្តការវីដេអូ (video worker) ដោយប្រើ systemctl stop នៅម៉ោង 12:47 ដើម្បីកែសម្រួលជួរការងារ (job queue) របស់វា។ នៅម៉ោង 12:55 វាបានដំណើរការឡើងវិញ៖ ម៉ាស៊ីនត្រួតពិនិត្យបានចាប់ផ្តើមវា។
លើកទីពីរ
នៅថ្ងៃទី 21 ខែតុលា យើងត្រូវការអង្គចងចាំ (memory) នៃម៉ាស៊ីនដែលក៏បម្រើគេហទំព័រពីររបស់យើងផងដែរ សម្រាប់ការសាកល្បងគំរូ (model test)។ ស្គ្រីបមួយបានបញ្ឈប់កម្មវិធីវេប (web apps) របស់គេហទំព័រ ការងារសម្របសម្រួល (sync job) និងធុងទិន្នន័យ (database container) ម្តងទៀតដោយប្រើ systemctl stop។ ប្រហែលប្រាំនាទីក្រោយមក ម៉ោងកំណត់មួយដែលត្រួតពិនិត្យគេហទំព័រ និងនៅម៉ោង 19:14 ម៉ាស៊ីនត្រួតពិនិត្យ បាននាំឡើងវិញនូវតង់ណែល (tunnel) និងកម្មវិធីវេប។
តង់ណែលបានទទួលចរាចរណ៍ឡើងវិញ ប៉ុន្តែកម្មវិធីវេបមិនអាចឆ្លើយតបបានទេ៖ គំរូដែលកំពុងសាកល្បង កាន់កាប់អង្គចងចាំ 114 GiB នៃម៉ាស៊ីន។ ចាប់ពីប្រហែលម៉ោង 19:14 ដល់ 20:00 ភ្ញៀវទស្សនាមួយចំនួនបានទទួលកំហុស 502។ នៅម៉ោង 20:00 យើងបានបិទដំណើរការ (disable) តង់ណែល កម្មវិធីវេប និងការងារសម្របសម្រួល ហើយបានបញ្ឈប់ម៉ោងកំណត់ត្រួតពិនិត្យ។
ច្បាប់ដែលយើងប្រើឥឡូវនេះ
- បញ្ឈប់សេវាកម្មដោយបិទដំណើរការ (disable) វា៖
sudo systemctl disable --now <unit>។ យកវាត្រឡប់មកវិញដោយsudo systemctl enable --now <unit>។ ម៉ាស៊ីនត្រួតពិនិត្យរបស់យើងពិនិត្យតែសេវាកម្មដែលបានបើកដំណើរការ (enabled) ប៉ុណ្ណោះ ដូច្នេះសេវាកម្មដែលបានបិទដំណើរការ (disabled) ត្រូវបានទុកឱ្យនៅស្ងៀម។ - បញ្ឈប់អ្វីៗទាំងអស់ដែលអាចនាំវាត្រឡប់មកវិញ៖ តង់ណែលនៅពីមុខវា និងម៉ោងកំណត់ណាមួយដែលត្រួតពិនិត្យវា។
- ការបញ្ឈប់ខ្លីមួយ គឺជាការប្រកួតប្រជែង។ ប្រសិនបើអ្នកប្រើតែ
stopសូមបញ្ចប់មុនពេលការត្រួតពិនិត្យបន្ទាប់ ដែលនៅលើម៉ាស៊ីនរបស់យើង កើតឡើងក្នុងរយៈពេលប៉ុន្មាននាទី។
អន្ទាក់ systemd ពីរទៀត ពីខែដូចគ្នា
systemctl mask --runtimeមិនមានប្រសិទ្ធភាពសម្រាប់ឯកតាឯកសារនៅក្នុង /etc/systemd/system ទេ។ ឯកតានៅក្នុង /etc មានអាទិភាពលើការបិទបណ្តោះអាសន្ននៅក្នុង /run ដូច្នេះពាក្យបញ្ជាដំណើរការដោយជោគជ័យ ប៉ុន្តែសេវាកម្មនៅតែចាប់ផ្តើម។ ដើម្បីទប់ស្កាត់សេវាកម្មមួយ យើងប្រើ drop-in ជាមួយConditionPathExists=!/etc/<name>.hold: ខណៈដែលឯកសារនោះមានវត្តមាន សេវាកម្មនឹងមិនចាប់ផ្តើមទេ ទាំងពេលចាប់ផ្តើមប្រព័ន្ធ និងពេលដំណើរការដោយដៃ។systemctl is-activeហៅសេវាកម្ម oneshot ដែលកំពុងដំណើរការថាជា inactive។ ខណៈដែលសេវាកម្មType=oneshotកំពុងដំណើរការ ស្ថានភាពរបស់វាគឺ "activating" ដូច្នេះis-activeបង្ហាញស្ថានភាពនោះ និងត្រឡប់មកវិញលេខ 3។ រង្វិលជុំមួយដូចជាwhile systemctl is-active --quiet job.service; do sleep 60; doneដែលមានបំណងរង់ចាំការងាររាត្រី ចេញភ្លាមៗ។ អានស្ថានភាពជំនួសវិញ៖ active, activating, reloading ឬ deactivating ទាំងអស់មានន័យថាវានៅតែកំពុងដំណើរការ។
Factory Floor ត្រួតពិនិត្យរកសេវាកម្មដែលបានបើកប្រើប្រាស់ ប៉ុន្តែមិនកំពុងដំណើរការ។ តាមលំនាំដើម វាគ្រាន់តែរាយការណ៍ពួកវា ហើយវាចាប់ផ្តើមពួកវាតែលុះត្រាតែអ្នកបើកមុខងារនោះ។ ចាប់តាំងពីកំណែ 1.0.3 ការជូនដំណឹងរបស់វាក៏បង្ហាញពីរបៀបផ្អាកសេវាកម្មដោយចេតនា ហើយ runbook របស់វាក៏បង្ហាញអត្ថន័យដូចគ្នាដែរ។