productize.blog
AI · ระบบเบื้องหลัง

daemon ที่ตายไป สองสัปดาห์ โดยไม่มีใครรู้

daemon คือโปรแกรมที่รันอยู่เบื้องหลังตลอดเวลา ปัญหาใหญ่ของมันไม่ใช่การพัง แต่คือการพังแบบไม่มีสัญญาณ นี่คือเรื่องของตัวหนึ่งที่ตายไปเงียบ ๆ สองสัปดาห์ และสิ่งที่มันสอนเรา

Yim· เขียนด้วยกันกับ Dobby (AI Oracle)/24 ก.ค. 2026

วันหนึ่งเราไปเปิดหน้าเว็บที่คอยดึงราคาสินค้ามาให้ดู แล้วสังเกตว่าราคายังเป็นชุดเดิมกับเมื่อหลายวันก่อน ตอนแรกก็นึกว่าตลาดนิ่ง จนไปกดดูข้างในถึงรู้ว่าตัวที่คอยดึงราคาให้ มันหยุดไปแล้ว หน้าเว็บยังเปิดได้ ตัวเลขยังโชว์ครบ แค่เป็นตัวเลขที่ค้างอยู่กับที่

ตัวที่คอยดึงราคานั่นแหละคือ daemon ตัวหนึ่ง มันเป็นโปรแกรมที่เราตั้งให้เปิดค้างไว้ ทำงานของมันเองเบื้องหลังตลอด โดยที่เราไม่ต้องไปสั่งทีละครั้ง แต่พอไม่มีใครนั่งเฝ้า วันที่มันล้มลง ก็เลยไม่มีเสียงอะไรดังขึ้นมาบอก

ที่น่ากลัวของ daemon ไม่ใช่ตอนที่มันพัง แต่คือตอนที่มันพัง แบบเงียบ ๆ ผิวนอกยังดูปกติทุกอย่าง กว่าจะรู้ตัวก็ผ่านไปหลายวัน บางตัวเป็นสัปดาห์ บทความนี้เลยอยากเล่าว่า daemon คืออะไร ผ่านตัวที่ตายไปเงียบ ๆ ในบ้านเราเอง ไล่เป็นสามช่วง เริ่มจาก daemon คืออะไรกันแน่ ต่อด้วย ทำไมมันถึงตายเงียบ ๆ แล้วปิดที่ วิธีทำให้มันส่งเสียงตอนตาย

ช่วงที่ 1daemon คืออะไรกันแน่

โปรแกรมที่เราใช้กันทั่วไป เปิดตอนจะใช้ ปิดตอนใช้เสร็จ อย่างเบราว์เซอร์หรือแอปแต่งรูป daemon ไม่ใช่แบบนั้น มันคือโปรแกรมที่ตั้งใจให้ เปิดค้างไว้ตลอด ไม่มีหน้าจอ ไม่มีปุ่มให้กด คอยทำงานซ้ำ ๆ ของมันอยู่เบื้องหลังเงียบ ๆ คำนี้มาจากยุคยูนิกซ์ ออกเสียงว่า "ดีมอน" หมายถึงตัวช่วยที่คอยทำงานอยู่หลังฉากโดยไม่ออกมาให้เห็น

พอไม่มีหน้าจอ มันก็ต้องมีตัวคอยดูแลแทนคน บนลินุกซ์ตัวนั้นคือ systemd หรือ cron หน้าที่ของมันคือคอยสั่งให้ daemon เริ่มทำงานตอนเปิดเครื่อง และคอยปลุกมันขึ้นมาใหม่ถ้าเกิดล้มลง ฟังดูเหมือนปลอดภัยดี แต่เดี๋ยวจะเล่าว่าตัวปลุกนี่แหละที่บางทีก็หลอกเราได้เหมือนกัน

ของจริงในบ้านเรามีอะไรบ้าง

ที่บ้านเรา (กองระบบเล็ก ๆ ที่เราดูแลเอง) มี daemon อยู่หลายตัว แต่ละตัวทำงานคนละอย่าง

เสน่ห์ของ daemon คือ ตั้งครั้งเดียวแล้วลืมมันไปได้เลย ไม่ต้องมานั่งกดเองทุกวัน แต่เสน่ห์ข้อนี้แหละที่ซ่อนกับดักไว้ ของที่เราลืมไปได้ ก็คือของที่ไม่มีใครมองมันเหมือนกัน วันที่มันเงียบหายไป เราก็เลยไม่ทันสังเกต เพราะความเงียบของมันในวันปกติ กับความเงียบในวันที่มันตาย (หยุดรันไปเฉย ๆ) หน้าตาเหมือนกันเป๊ะ ทั้งบทความนี้เราจะเรียกอาการที่ daemon หยุดทำงานว่า "ตาย" ตามคำที่สายเขียนโปรแกรมใช้กันจริง

ช่วงที่ 2ทำไม daemon ถึงตายเงียบ ๆ

เคสของ daemon ที่ตายเงียบ ๆ ในบ้านเรามีหน้าตาเหมือนกันหมด ตัวหนึ่งข้างในล้มลง แต่มีตัวสำรองนุ่ม ๆ รับไว้ ผิวนอกเลยยังทำงานได้ ไม่มีใครรู้ แล้วก็ลากยาว ขอเล่า 4 ตัวที่เจอกับตัวเอง

ตัวที่ตายไปสองสัปดาห์

มี daemon ตัวหนึ่งทำหน้าที่เป็นสะพานเชื่อมไปหาเครื่องอีกเครื่อง วันที่ย้ายเครื่อง เลขที่อยู่ปลายทางเปลี่ยน แต่ในโค้ดยังฝังเลขเก่าไว้ พอมันสตาร์ท ก็เลยล้มภายใน 4 วินาที ประเด็นคือเราตั้ง systemd ไว้ว่า "ล้มแล้วให้ปลุกใหม่เสมอ" ตัวปลุกก็ทำตามหน้าที่ ปลุกแล้วล้ม ปลุกแล้วล้ม จนถึงจุดที่มันยอมแพ้แล้วหยุดปลุกไปเฉย ๆ ตัวที่เราตั้งไว้ให้กันมันตาย กลับกลายเป็นตัวที่ช่วยกลบร่างให้เงียบสนิท กว่าจะรู้ว่ามันตาย ก็ผ่านไปสองสัปดาห์

สมองที่โดนสับเป็นตัวเล็กลง

อีกกลุ่มหนึ่งคือ daemon ที่ต้องเรียกใช้ AI ตัวเก่งเป็นสมอง วันหนึ่งกุญแจที่ใช้ยืนยันตัวตนหมดอายุ พอเรียกตัวเก่งไม่ได้ มันก็ถอยไปใช้โมเดลตัวเล็กที่รันในเครื่องแทน ผลคือทุกตัว ยังตอบได้เหมือนเดิม แค่ตอบโง่ลง พอมันยังตอบได้ ก็เลยไม่มีใครเอะใจไปถาม ลากไปสี่วันกว่าจะจับได้ สัญญาณเดียวที่โผล่มาให้เห็นคือ error เล็ก ๆ ในงานตัวเดียวเท่านั้นเอง

ตัวที่ไม่เคยทำงานเลยตั้งแต่แรก

ตัวนี้หนักกว่าเพื่อน มีสคริปต์ตัวหนึ่งที่เขียนไว้ให้สรุปสถานะให้อ่านทุกครั้งที่เปิดงาน ปรากฏว่ามันมี error ตั้งแต่บรรทัดแรก แต่โค้ดดันเขียนดักไว้แบบ "ถ้าพังก็ช่างมัน" พอพังปุ๊บ มันเลยตอบกลับมาเฉย ๆ ว่า "ไม่มีข้อมูล" ทุกครั้ง เราอ่านคำว่าไม่มีข้อมูล แล้วนึกว่ามันทำงานแต่ไม่เจออะไร ที่จริงมัน ไม่เคยทำงานสำเร็จเลยสักครั้งตลอดอายุของมัน แค่พังอย่างสุภาพจนดูเหมือนปกติ

ตัวเฝ้าเงินที่ล้มแบบไม่ทิ้งรอย

ตัวสุดท้าย เป็นตัวคอยเฝ้าค่าใช้จ่าย มันตายไป แล้วตัวตั้งเวลา (cron) ก็ยังพยายามเรียกมันซ้ำวันละหลายรอบ เรียกแล้วพัง รวมแล้วสองร้อยกว่าครั้ง แต่ไม่มีการเขียนบันทึกไว้เลยแม้แต่บรรทัดเดียว มันพังเงียบสนิทชนิดที่ย้อนไปดูก็ไม่เจอรอย

บทเรียนร่วมของทั้ง 4 ตัว

ไล่ดูทั้งสี่เคสแล้วเจอแก่นเดียวกัน ทุกตัวมีตัวสำรองที่ดี ทำให้ผิวนอกยังดูปกติ และนั่นแหละคือตัวปัญหา ยิ่งตัวสำรองออกแบบมานุ่มนวลเท่าไร การตายยิ่งเงียบเท่านั้น ความนุ่มนวลที่เราตั้งใจใส่เข้าไปเพื่อไม่ให้ระบบล่ม กลายเป็นตัวลบสัญญาณเตือนไปพร้อมกัน ตายแบบดังยังดีเสียกว่า เพราะอย่างน้อยเราได้ยิน

ช่วงที่ 3ทำให้มันส่งเสียงตอนตาย

ทางแก้ไม่ใช่การทำให้ daemon ไม่มีวันพัง เพราะทุกอย่างพังได้เสมอ สักวันกุญแจก็หมดอายุ เลขที่อยู่ก็เปลี่ยน เครื่องก็รีสตาร์ท ทางแก้จริงคือ ทำให้วันที่มันพัง เราได้ยินเสียง มีอยู่สามอย่างที่ช่วยเปลี่ยนความเงียบให้กลายเป็นเสียง

1. ตัวสำรองต้องประกาศตัวเสมอ

ทุกครั้งที่ระบบถอยไปใช้ตัวสำรอง อย่าให้มันถอยเงียบ ๆ ต้องบังคับให้มันส่งเสียงออกมาอย่างน้อย 1 ช่อง เขียนบันทึกการทำงาน (log) สักบรรทัด หรือปักธงไว้ในไฟล์สถานะ ว่า "ตอนนี้ฉันใช้ของสำรองอยู่นะ" กลับไปดูเคสสมองที่โดนสับเป็นตัวเล็ก ถ้าตอนที่มันถอยไปใช้โมเดลตัวเล็ก มันเขียนไว้สักบรรทัดว่ากำลังใช้ตัวสำรอง เราคงจับได้ในไม่กี่นาที ไม่ใช่สี่วัน การถอยไปใช้ของสำรองแบบไม่บอกใคร คือ ระเบิดเวลาที่เราตั้งเอง

2. ตัวเตือนต้องพิสูจน์ว่าส่งถึง และต้องมีสัญญาณชีพ

ตัวเตือนที่ยิงข้อความแล้วเชื่อว่าถึงปลายทางเอง เป็นตัวเตือนที่ไว้ใจไม่ได้ เราเคยมีตัวเฝ้าที่ยิง alert ออกไป แต่ไม่เช็คว่าปลายทางรับหรือเปล่า แล้วจดใส่ตัวเองว่า "เตือนไปแล้ว" พอวันที่ข้อความส่งไม่ถึงจริง ๆ มันก็จำว่าเตือนแล้ว เลยไม่ยิงซ้ำ alert ที่ส่งไม่ถึงเลยหายไปถาวร ตัวเตือนที่ดีต้องจับให้ได้ว่าปลายทางรับจริงไหม และต้องส่งสัญญาณชีพเป็นจังหวะด้วย เพื่อให้เราแยกออกว่า "เงียบเพราะทุกอย่างปกติ" กับ "เงียบเพราะตัวเตือนเองก็ตายไปแล้ว" ไม่ใช่เรื่องเดียวกัน

3. เช็คให้ลึกกว่าคำว่า "ยังตอบอยู่ไหม"

บทเรียนจากสมองตัวเล็กคือ ถามว่า "daemon ยังตอบอยู่ไหม" ไม่พอ เพราะมันตอบ แค่ตอบด้วยของที่ด้อยลง คำถามที่ต้องถามคือ "ตอบด้วยสมองไหน" การเช็คว่ามันยังมีชีวิตต้องเจาะลงไปถึงชั้นในว่ามันยังทำงานด้วยของที่ถูกตัวอยู่จริง ไม่ใช่แค่เห็นว่ามีเสียงตอบกลับมาแล้วสบายใจ

สามชั้นที่เราวางไว้กันเรื่องนี้

พอเก็บบทเรียนมาครบ เราเลยวางตัวเฝ้าไว้สามชั้นซ้อนกัน แนวคิดเรียบง่าย

  1. ชั้นล่าง มีตัวที่คอยยิงเข้าไปลองใช้ daemon จริงทุกวัน ไม่ใช่แค่เช็คว่ามันเปิดอยู่ แต่ลองสั่งงานจริงแล้วดูว่าได้ของถูกกลับมาไหม
  2. ชั้นกลาง เอาผลจากชั้นล่างมารวมเป็นสรุปสถานะที่มีคนอ่านเป็นประจำ ตัวไหนเขียว ตัวไหนแดง ตัวไหนเงียบหายไปนานผิดปกติ
  3. ชั้นบน เป็นผิวที่เรามองเห็นตลอดเวลา เหมือนไฟสถานะที่ติดค้างอยู่ พอมีอะไรไม่โอเค มันก็เปลี่ยนเป็นสีเตือนให้สะดุดตา

กุญแจของสามชั้นนี้คือ ชั้นบนคอยเฝ้าชั้นล่างด้วย รวมถึงเช็คว่าสัญญาณจากข้างล่างยัง "สด" อยู่ ไม่ใช่ค้างมาจากเมื่อวาน เพราะไม่งั้นตัวเฝ้าเองก็ตายเงียบได้เหมือนกัน ส่วนวิธีต่อสายให้สามชั้นนี้ทำงานเองอัตโนมัติจริง ๆ เป็นส่วนที่เราลงแรงทำต่อและขอเก็บรายละเอียดไว้ แต่หลักคิด 3 ข้อข้างบนเอาไปใช้ได้เลยโดยไม่ต้องมีเครื่องมืออะไรพิเศษ

สรุปสั้น ๆ ก่อนจบ

daemon คือโปรแกรมที่รันเบื้องหลังตลอดเวลา ข้อดีคือตั้งแล้วลืมได้ ข้อเสียก็คือข้อเดียวกัน พอลืมมันไปได้ วันที่มันตายก็เลยไม่มีใครรู้ ยิ่งเราใส่ตัวสำรองที่ดีเข้าไปเท่าไร มันยิ่งตายเงียบเท่านั้น กฎที่เหลือมีข้อเดียว ทุกอย่างที่รันเองเงียบ ๆ ต้องถูกบังคับให้ส่งเสียงตอนที่มันเริ่มไม่ปกติ

ลองมองรอบตัวดู ที่บ้านหรือที่งานมักมีอะไรบางอย่างที่ทำงานเองเงียบ ๆ อยู่เสมอ ตัวสำรองข้อมูลที่ตั้งไว้ให้รันกลางดึก สคริปต์ที่คอยส่งรายงานทุกเช้า ปลั๊กอินที่คอยซิงก์ไฟล์ให้ คำถามที่น่าถามไม่ใช่ "มันจะพังไหม" เพราะสักวันมันพังแน่ แต่คือ "วันที่มันพัง เราจะได้ยินอะไรบ้างไหม" ถ้าคำตอบคือเงียบสนิท นั่นแหละคือจุดที่ควรเริ่ม

ที่มาและอ้างอิง
ติดตาม

รับบทความใหม่และของฟรีก่อนใคร

ทิ้งอีเมลไว้ บทความใหม่และของฟรีเป็นครั้งคราวจะส่งไปให้ ไม่สแปม

ใช้อีเมลเพื่อส่งอัปเดตเท่านั้น

ความคิดเห็น

ร่วมพูดคุย

แบ่งปันความคิดเห็นได้เลย

ชื่อจะแสดงต่อสาธารณะ อีเมลเก็บเป็นความลับ ไม่แสดงที่ไหน

กำลังโหลดความคิดเห็น…