---
read_when:
    - คุณต้องการทราบว่าการรีสตาร์ต Gateway จะทำให้งานของเอเจนต์ที่กำลังดำเนินการสูญหายหรือไม่
    - การทำงานของเอเจนต์ถูกขัดจังหวะเนื่องจากการรีสตาร์ต การหยุดทำงาน หรือการโหลดการกำหนดค่าใหม่
    - คุณกำลังแก้ไขข้อบกพร่องในการกู้คืนเซสชันโดยอัตโนมัติหลังจาก Gateway กลับมาทำงานอีกครั้ง
summary: 'สิ่งที่ยังคงทำงานต่อหลัง Gateway รีสตาร์ตหรือขัดข้อง: รอบการทำงานของเอเจนต์ที่ถูกขัดจังหวะจะดำเนินการต่อโดยอัตโนมัติ ซับเอเจนต์และงานเบื้องหลังจะกู้คืน และการส่งที่อยู่ในคิวจะทยอยดำเนินการจนหมด'
title: การกู้คืนหลังการรีสตาร์ต
x-i18n:
    generated_at: "2026-07-16T19:17:08Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: f2fc0263d792e78e75fb97be44671b44287d469b949e11640f11b6ff651dafb9
    source_path: gateway/restart-recovery.md
    workflow: 16
---

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

หน้านี้อธิบายว่าสิ่งใดยังคงอยู่หลังการรีสตาร์ต วิธีตรวจพบงานที่ถูกขัดจังหวะ
และลักษณะการดำเนินงานต่อโดยอัตโนมัติ

## สิ่งที่ยังคงอยู่หลังการรีสตาร์ต

| สถานะ                         | พื้นที่จัดเก็บ                                     | ลักษณะการทำงานเมื่อรีสตาร์ต                                                 |
| ----------------------------- | ------------------------------------------- | ----------------------------------------------------------------------- |
| ประวัติการสนทนา          | ฐานข้อมูล SQLite แยกตามเอเจนต์                   | ไม่เปลี่ยนแปลง เซสชันดำเนินต่อจากบันทึกการสนทนาที่จัดเก็บไว้                 |
| รอบการทำงานของเซสชันหลักที่ถูกขัดจังหวะ | แถวเซสชันและบันทึกการสนทนาใน SQLite แยกตามเอเจนต์ | ดำเนินการต่อหรือปรับสถานะให้สอดคล้องโดยอัตโนมัติภายในไม่กี่วินาทีหลังเริ่มต้นระบบ         |
| การทำงานของเอเจนต์ย่อย                 | SQLite (ฐานข้อมูลสถานะที่ใช้ร่วมกัน)              | กู้คืนรีจิสทรีเมื่อบูต และดำเนินการทำงานที่ถูกขัดจังหวะต่อ                     |
| งานเบื้องหลัง              | SQLite (ฐานข้อมูลสถานะที่ใช้ร่วมกัน)              | ปรับสถานะให้สอดคล้องเมื่อบูต และกู้คืนการทำงานที่ไม่มีเจ้าของหรือทำเครื่องหมายว่าสูญหาย              |
| การนำส่งขาออกที่อยู่ในคิว    | คิวการนำส่ง SQLite                       | ระบายคิวหลังรีสตาร์ต และลองส่งคำตอบที่ยังไม่ได้นำส่งอีกครั้ง                  |
| งานที่กำหนดเวลาไว้ (cron)         | พื้นที่จัดเก็บ cron ใน SQLite                           | กำหนดการยังคงอยู่ และตัวกำหนดเวลาจะตั้งการทำงานใหม่เมื่อบูต                        |
| การดำเนินการต่อหลังรีสตาร์ต          | ตัวบ่งชี้การรีสตาร์ตใน SQLite                     | ส่งการติดตามผลแบบครั้งเดียวไปยังเซสชันที่ขอให้รีสตาร์ต |

## การรีสตาร์ตแบบนุ่มนวลจะระบายงานก่อน

การรีสตาร์ตที่มีการร้องขอ (`openclaw gateway restart` การเปลี่ยนแปลงการกำหนดค่าที่ต้อง
รีสตาร์ต หรือการอัปเดต Gateway) จะไม่ยุติงานที่กำลังดำเนินอยู่ทันที
Gateway จะหยุดรับงานใหม่ แล้วรอให้รอบการทำงานของเอเจนต์และ
งานเบื้องหลังที่ใช้งานอยู่เสร็จสิ้น ภายในงบเวลาระบายงาน (ค่าเริ่มต้นคือ 5 นาที) ดังนั้น
การรีสตาร์ตส่วนใหญ่จึงไม่ขัดจังหวะงานใดเลย

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

## วิธีตรวจพบงานที่ถูกขัดจังหวะ

กลไกเสริมกันสามประการจะทำเครื่องหมายเซสชันที่รอบการทำงานไม่เสร็จสิ้น:

- **เมื่อรับรอบการทำงาน:** สำหรับรอบข้อความทั่วไปในเซสชันหลักที่มีอยู่
  Gateway จะเพิ่มข้อความของผู้ใช้ ทำเครื่องหมายว่าเซสชันกำลังทำงาน และบันทึก
  การอ้างสิทธิ์การนำส่งเพื่อการกู้คืนในธุรกรรม SQLite เดียว ก่อนดำเนินการกับโมเดลหรือ
  ฮุก `before_agent_reply` โดย Control UI จะดำเนินการนี้ก่อนส่งการตอบรับ
  `started` กลับ ส่วนการส่งผ่านช่องทางจะดำเนินการเมื่อรอบการทำงานที่เตรียมไว้
  รับช่วงการทำงานของเอเจนต์
  คำสั่ง ไฟล์แนบ การแทนที่ค่าเฉพาะรอบ การนำส่งที่รอดำเนินการ คำบอกใบ้การยกเลิกก่อนหน้า
  เซสชันที่ Plugin เป็นเจ้าของ และรอบการทำงานที่มีฮุกการดำเนินการ จะยังคงใช้
  เส้นทางการรับงานเฉพาะของตน
  หากติดตั้งฮุก `before_agent_reply` การรับงานจะบันทึกเฟสของฮุกด้วย
  การกู้คืนจะไม่เล่นซ้ำฮุกที่ถูกขัดจังหวะระหว่างการเรียก เมื่อฮุกที่ไม่ได้จัดการ
  ทำงานเสร็จ จุดตรวจสอบจะบันทึกผลลัพธ์นั้น แต่การกู้คืนจะยังคงปฏิเสธการดำเนินการ
  ขณะที่ฮุกดังกล่าวยังทำงานอยู่ เนื่องจากจุดตรวจสอบไม่สามารถพิสูจน์ได้ว่า
  โค้ดและการกำหนดค่าของ Plugin เดิมถูกโหลดหลังการรีสตาร์ต ผลลัพธ์ข้อความ
  ที่จัดการแล้วและผลลัพธ์แบบเงียบจะถูกบันทึกเป็นจุดตรวจสอบแยกกันเพื่อให้ยุติสถานะ
  ได้อย่างแน่นอน
  การอ้างสิทธิ์การกู้คืนแบบคงทนที่เขียนโดยเวอร์ชันเก่าไม่มีเครื่องหมายระบุ
  ความเป็นเจ้าของของแหล่งที่มา จึงได้รับการตรวจสอบฮุกแบบปฏิเสธการดำเนินการเช่นเดียวกัน
  ระหว่างการอัปเกรด
- **เมื่อปิดระบบ:** ระหว่างการระบายงานเพื่อรีสตาร์ต ทุกเซสชันที่มีการทำงานอยู่
  จะได้รับเครื่องหมายการกู้คืนในพื้นที่จัดเก็บเซสชันก่อนที่การทำงานนั้นจะถูก
  ยกเลิก
- **เมื่อเริ่มต้นระบบ:** Gateway จะสแกนพื้นที่จัดเก็บเซสชันเพื่อหาเซสชันที่ยัง
  อ้างว่ากำลังทำงาน แต่ไม่มีเจ้าของที่ทำงานอยู่ในโพรเซสใหม่ วิธีนี้ตรวจพบ
  ระบบขัดข้องรุนแรงและการยุติโพรเซสที่ไม่มีโค้ดปิดระบบทำงาน ระบบจะล้างไฟล์ล็อก
  บันทึกการสนทนาที่ค้างอยู่ในเวลาเดียวกัน

## การดำเนินงานต่อโดยอัตโนมัติ

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

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

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

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

OpenClaw ยังสามารถสร้างงาน [Code Mode](/th/reference/code-mode) แบบอ่านอย่างเดียว
ที่ถูกขัดจังหวะขึ้นใหม่ได้ Code Mode จะทำเครื่องหมายการทำงานเหล่านี้ว่าปลอดภัย
ต่อการรีสตาร์ต และปฏิเสธเครื่องมือในแค็ตตาล็อกหรือเนมสเปซของ Plugin ที่ก่อให้เกิด
ผลข้างเคียงก่อนดำเนินการ หากการรีสตาร์ตเกิดขึ้นที่ตัวควบคุม
`wait` Gateway ใหม่จะสร้างรอบการทำงานขึ้นใหม่จากบันทึกการสนทนา
และบังคับให้การดำเนินการที่สร้างขึ้นใหม่ยังคงปลอดภัยต่อการรีสตาร์ต แม้โมเดลจะละเว้น
หรือล้างแฟล็กดังกล่าว โฮสต์จะกรองรอบการทำงานที่สร้างขึ้นใหม่ทั้งหมดให้เหลือเฉพาะ
เครื่องมือหลักแบบอ่านอย่างเดียวที่ผ่านการตรวจสอบ และเครื่องมือของ Plugin ที่ระบุ
อย่างชัดเจนว่าปลอดภัยต่อการเล่นซ้ำ รวมถึงกรณีที่ Code Mode ถูกปิดใช้งานหลัง
การรีสตาร์ต งานที่ก่อให้เกิดผลข้างเคียงจะยังคงได้รับการป้องกันด้วยข้อความแจ้งให้
ส่งซ้ำ แทนการเสี่ยงเขียนข้อมูลซ้ำ

### เอเจนต์ย่อย

การทำงานของเอเจนต์ย่อยจะคงอยู่ในฐานข้อมูลสถานะ SQLite ที่ใช้ร่วมกัน ดังนั้น
รีจิสทรีเอเจนต์ย่อยจึงยังคงอยู่ข้ามโพรเซส เมื่อบูต ระบบจะกู้คืนรีจิสทรีและ
ดำเนินเซสชันเอเจนต์ย่อยที่ถูกขัดจังหวะต่อพร้อมบริบทงานเดิม โดยมีกลไก
ความปลอดภัยสองประการ:

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

### งานเบื้องหลัง

[รีจิสทรีงานเบื้องหลัง](/th/automation/tasks) ใช้ SQLite เป็นพื้นที่จัดเก็บและ
จะได้รับการปรับสถานะให้สอดคล้องเมื่อบูตและตามช่วงเวลาที่กำหนด โดยระบบจะกู้คืน
ผลลัพธ์แบบคงทนที่บันทึกโดยการทำงานที่เสร็จสิ้น และทำเครื่องหมายการทำงาน
ที่โพรเซสเจ้าของหายไปว่าสูญหายหลังพ้นช่วงผ่อนผัน แทนการปล่อยให้ค้างอยู่ตลอดไป

### การรีสตาร์ตที่เอเจนต์ร้องขอ

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

## กลไกความปลอดภัยและการสังเกตการณ์

- **ตัวตัดวงจรการขัดข้องซ้ำ:** การบูตที่ไม่สมบูรณ์ 3 ครั้งภายใน 5 นาทีจะเรียกใช้
  ตัวตัดวงจร ซึ่งระงับการเริ่มบริการเสริมโดยอัตโนมัติในการบูตครั้งถัดไป เพื่อไม่ให้
  Gateway ที่ขัดข้องซ้ำทวีความรุนแรงของปัญหา ระบบจะกลับมาทำงานเมื่อช่วงเวลา
  ติดตามการบูตที่ไม่สมบูรณ์สิ้นสุดลง
- **เมตริก:** กิจกรรมการกู้คืนจะถูกส่งออกผ่าน
  [Prometheus](/th/gateway/prometheus) ในชื่อ `openclaw_session_recovery_total` และ
  `openclaw_session_recovery_age_seconds`
- **บันทึกเหตุการณ์:** การตัดสินใจเกี่ยวกับการกู้คืนจะถูกบันทึกภายใต้
  ระบบย่อย `main-session-restart-recovery` และ `subagent-interrupted-resume`

## สิ่งที่ระบบไม่ดำเนินงานต่อ

- เซสชันที่ถูกยกเว้นจากการกู้คืนเซสชันหลัก เนื่องจากมีเจ้าของรายอื่นจัดการอยู่แล้ว:
  เซสชันเอเจนต์ย่อย (การกู้คืนเอเจนต์ย่อย), เซสชัน cron (ตัวกำหนดเวลาจะเรียกใช้
  อีกครั้งตามกำหนดการ) และเซสชันที่ ACP จัดการ (IDE หรือไคลเอนต์ที่เชื่อมต่อ
  เป็นเจ้าของการดำเนินงานต่อ)
- เซสชันที่ไม่สามารถดำเนินงานต่อจากส่วนท้ายของบันทึกการสนทนาได้อย่างปลอดภัย
  เซสชันเหล่านี้จะได้รับข้อความแจ้งให้ส่งซ้ำตามที่อธิบายไว้ข้างต้น แทนการเรียกใช้ซ้ำ
  โดยไม่มีการแจ้ง
- งานที่ไม่เคยถูกรับเข้าระบบ ข้อความที่เข้ามาระหว่างช่วงระบายงานจะถูกปฏิเสธ
  พร้อมข้อผิดพลาดการรีสตาร์ตที่ชัดเจน แทนการนำเข้าคิวของโพรเซสที่กำลังจะยุติ
  โดยไม่มีการแจ้ง
