วงจรชีวิตของGatewayบนmacOS¶
แอปmacOS จัดการGatewayผ่านlaunchd เป็นค่าเริ่มต้น และจะไม่สตาร์ต
Gatewayเป็นโปรเซสลูก แอปจะพยายามเชื่อมต่อกับGatewayที่กำลังรันอยู่แล้วบนพอร์ตที่กำหนดก่อน หากไม่พบจึงจะเปิดใช้งานบริการlaunchdผ่านCLIภายนอก openclaw (ไม่มีรันไทม์ฝังมา) วิธีนี้ช่วยให้เริ่มอัตโนมัติเมื่อเข้าสู่ระบบและรีสตาร์ตเมื่อเกิดการแครชได้อย่างเชื่อถือได้ มันจะพยายามเชื่อมต่อกับ Gateway ที่กำลังทำงานอยู่แล้วบนพอร์ตที่กำหนดค่าไว้ก่อน หากไม่สามารถเข้าถึงได้ ระบบจะเปิดใช้งานบริการ launchd ผ่าน CLI ภายนอก openclaw (ไม่มีรันไทม์ฝังในตัว) 1. สิ่งนี้ช่วยให้คุณเริ่มอัตโนมัติเมื่อเข้าสู่ระบบได้อย่างเชื่อถือได้ และรีสตาร์ตใหม่เมื่อเกิดการแครช
โหมดโปรเซสลูก (Gatewayถูกสตาร์ตโดยแอปโดยตรง) ยังไม่ถูกใช้งาน ในปัจจุบัน หากต้องการการเชื่อมโยงกับUIที่แน่นขึ้น ให้รันGatewayด้วยตนเองในเทอร์มินัล 2. หากคุณต้องการการเชื่อมต่อกับ UI ที่แน่นแฟ้นกว่า ให้รัน Gateway ด้วยตนเองในเทอร์มินัล
พฤติกรรมเริ่มต้น (launchd)¶
- แอปติดตั้ง LaunchAgent ต่อผู้ใช้โดยมีป้ายกำกับ
bot.molt.gateway(หรือbot.molt.<profile>เมื่อใช้--profile/OPENCLAW_PROFILE; รองรับ legacycom.openclaw.*). - เมื่อเปิดใช้งานโหมดLocal แอปจะตรวจให้แน่ใจว่า LaunchAgent ถูกโหลด และ จะสตาร์ตGatewayหากจำเป็น
- บันทึกถูกเขียนไปยังพาธล็อกGatewayของlaunchd (ดูได้ใน Debug Settings)
คำสั่งที่ใช้บ่อย:
launchctl kickstart -k gui/$UID/bot.molt.gateway
launchctl bootout gui/$UID/bot.molt.gateway
แทนที่ป้ายกำกับด้วย bot.molt.<profile> เมื่อรันโปรไฟล์ที่มีชื่อ
3. บิลด์สำหรับนักพัฒนาแบบไม่ได้เซ็นชื่อ¶
scripts/restart-mac.sh --no-sign ใช้สำหรับบิลด์โลคัลอย่างรวดเร็วเมื่อคุณยังไม่มี
คีย์สำหรับการเซ็นชื่อ เพื่อป้องกันไม่ให้launchdชี้ไปยังไบนารีรีเลย์ที่ไม่ถูกเซ็นชื่อ แอปจะ: 4. เพื่อป้องกันไม่ให้ launchd ชี้ไปยังไบนารีรีเลย์ที่ไม่ได้เซ็นชื่อ มันจะ:
- เขียน
~/.openclaw/disable-launchagent.
การรันแบบเซ็นชื่อของ scripts/restart-mac.sh จะล้างการแทนค่านี้หากพบมาร์กเกอร์
หากต้องการรีเซ็ตด้วยตนเอง: 5. วิธีรีเซ็ตด้วยตนเอง:
rm ~/.openclaw/disable-launchagent
โหมดแนบอย่างเดียว (Attach-only)¶
หากต้องการบังคับให้แอปmacOS ไม่ติดตั้งหรือจัดการlaunchdเลย ให้เปิดแอปด้วย
--attach-only (หรือ --no-launchd) ซึ่งจะตั้งค่า ~/.openclaw/disable-launchagent,
ทำให้แอปทำได้เพียงแนบเข้ากับGatewayที่กำลังรันอยู่แล้ว คุณสามารถสลับพฤติกรรมเดียวกันได้ใน Debug Settings 6. สิ่งนี้จะตั้งค่า ~/.openclaw/disable-launchagent ดังนั้นแอปจะเชื่อมต่อเฉพาะกับ Gateway ที่กำลังรันอยู่แล้วเท่านั้น 7. คุณสามารถสลับพฤติกรรมเดียวกันนี้ได้ใน Debug Settings
โหมดRemote¶
- โหมด Remote จะไม่เริ่ม Gateway ภายในเครื่อง โหมดRemoteจะไม่สตาร์ตGatewayในเครื่อง แอปจะใช้อุโมงค์SSHไปยังโฮสต์ระยะไกลและเชื่อมต่อผ่านอุโมงค์นั้น
เหตุผลที่เราเลือกใช้launchd¶
- เริ่มอัตโนมัติเมื่อเข้าสู่ระบบ
- มีกลไกรีสตาร์ต/KeepAliveในตัว
- บันทึกและการกำกับดูแลที่คาดเดาได้
หากจำเป็นต้องมีโหมดโปรเซสลูกจริงๆ อีกครั้ง ควรจัดทำเอกสารเป็นโหมดสำหรับนักพัฒนาเท่านั้นที่แยกชัดเจน