---
title: "แก้ไขเมื่อ erpc worker ทำงานล้มเหลว"
description: "ข้อความ error ของ erpc worker ที่พบบ่อยที่สุด ความหมายและสิ่งที่ต้องทำ วิธีกู้คืนเซิร์ฟเวอร์ที่อาจถูกยึดการควบคุม และสิ่งที่ erpc ไม่ทำเด็ดขาด"
canonical: "https://erpc.global/th/doc/erpc-cli/worker-troubleshooting/"
locale: "th"
---

# แก้ไขเมื่อ erpc worker ทำงานล้มเหลว

หาส่วนต้นของข้อความที่ `erpc worker` แสดง แล้วทำตามที่แถวของข้อความนั้นระบุ

หน้านี้อธิบาย ERPC CLI `v0.1.0-rc.4` ซึ่งเป็นเวอร์ชัน pre-release

## ข้อความ error และสิ่งที่ต้องทำ

ความล้มเหลวของ worker ใช้รหัสและ exit status ของ erpc: ดู [error และ exit code](https://erpc.global/th/doc/erpc-cli/commands/#error-และ-exit-code)

| ข้อความ (ส่วนต้น) | สาเหตุ | สิ่งที่ต้องทำ |
| --- | --- | --- |
| `<app> cannot start without <SETTING>` | `run.requires` ระบุการตั้งค่าที่ไม่มีสิ่งใดกำหนดค่าไว้ | `erpc worker secret put <SETTING>` หรือกำหนดค่าใน `[vars]` หรือ deploy พร้อมสายข้อมูลที่กำหนดค่านั้น (`--grpc`, `--unlimited`) |
| `your key was added but does not get in` | SSH agent ไม่ได้ลงนาม: 1Password ถูกล็อกอยู่ หรือคำขอนั้นไม่ได้รับอนุญาต | ปลดล็อก 1Password อนุญาตคำขอ แล้วรันคำสั่งเดิมอีกครั้ง คำสั่งจะทำงานต่อจากเดิม |
| `1Password could not …: authorization timeout` | 1Password ขอการอนุมัติแต่ไม่มีใครตอบ | อนุญาตคำขอใน 1Password แล้วรันอีกครั้ง |
| `<NAME> is empty; nothing was kept` | `secret put` อ่าน standard input ที่ว่างเปล่า: shell ไม่ใช่เทอร์มินัล | รันในเทอร์มินัล หรือส่งค่าเข้ามาผ่าน pipe |
| `the keystore is locked, and nobody is at a terminal …` | คำสั่งที่ไม่มีเทอร์มินัลต้องใช้ keystore และไม่มีการปลดล็อกที่เก็บไว้ | รัน `erpc worker secret unlock` ในเทอร์มินัล แล้วรันคำสั่งนั้นอีกครั้ง |
| `nothing is kept under keystore:… on this machine` | ค่าถูกเก็บไว้ใน keystore ของเครื่องอื่น | `erpc worker secret put <NAME> --replace` ที่เครื่องนี้ ส่วนคีย์ ให้นำไดเรกทอรี `keystore` ทั้งหมดของเครื่องนั้นมาพร้อมวลีรหัสผ่านของมัน |
| `release <id> failed: …; the server went back to <previous>` | release ใหม่ไม่ผ่าน health check | ดู `erpc worker logs` ส่วน release ก่อนหน้ายังคงทำงานอยู่ |
| `… is locked: the trading key has not been handed over` | เซิร์ฟเวอร์รีบูต เอเจนต์ล้มเหลวหรือถูก kill แล้ว systemd เริ่มเอเจนต์ใหม่ หรือมีการใช้ `stop --lock` | `erpc worker start` |
| `port <n> is taken: …` | worker อื่นที่ถูกตั้งให้ทำงานต่อเนื่องใช้พอร์ต health check เดียวกัน หรือมีโปรแกรมอื่นรอรับการเชื่อมต่อบนพอร์ตนั้น | กำหนดพอร์ตเฉพาะของแอปใน `erpc.toml` แล้ว deploy อีกครั้ง |
| `release <id> runs, and its WAF did not come up: …` | WAF ไม่เริ่มรอรับการเชื่อมต่อ ส่วนใหญ่เป็นเพราะมีโปรแกรมอื่นอยู่บน `waf.port` | `erpc worker logs --waf` จากนั้นทำให้พอร์ตว่าง หรือเปลี่ยน `waf.port` แล้ว deploy อีกครั้ง ระหว่างนั้นแอปยังทำงานอยู่ |
| `waf.<key> …` (จาก `check`, `deploy`) | key ใน `[waf]` อยู่นอกขอบเขตที่กำหนด หรือ `waf.port` ต่ำกว่า 1024 หรือตรงกับพอร์ตของ `run.port`, SSH หรือ health check | แก้ไข `erpc.toml` คำสั่ง `erpc worker check` จะแสดงปัญหาทั้งหมดในครั้งเดียว |
| `the WAF's port <port> was not opened to …` (จาก `firewall allow`, `deny`, `sync`) | การเปลี่ยนแปลงนี้จะอนุญาตให้ใครรายใหม่เข้ามาภายใต้กฎ WAF ที่เซิร์ฟเวอร์ยังไม่ได้รัน | `erpc worker deploy`: คำสั่งนี้จะนำกฎใหม่ไปใช้ แล้วจึงเปิดพอร์ต |
| `<kind> line <id> did not become active in <n> minutes` | สายข้อมูลยังอยู่ระหว่างการตั้งค่า | deploy อีกครั้งเพื่อรอต่อ |
| `OUT_OF_STOCK` | ไม่มีเซิร์ฟเวอร์ของแพ็กเกจนั้นว่างในภูมิภาคนั้น | deploy ด้วย `--region <another>` |
| `the start may or may not have gone through: …` | คำขอถูกส่งออกไปแล้วแต่ไม่มีคำตอบกลับมา หรือคำตอบเป็น 5xx, 408 หรือ 429 | รันคำสั่งเดิมอีกครั้ง: คำสั่งจะส่งคำขอเดิม |
| `this purchase, or another of the account's, is still being made …` | คำขอแรกยังดำเนินการอยู่ หรือการซื้ออื่นของบัญชีถือล็อกอยู่ | รันคำสั่งเดิมอีกครั้งในอีกสักครู่: คำสั่งจะส่งคำขอเดิม |
| `… changed in 1Password since this command read it` | เครื่องอื่นเขียน item ของ inventory ในระหว่างนั้น | รันคำสั่งอีกครั้ง |
| `the shared RPC takes none of the account's API keys from this machine (<n> tried)` (จาก `secret put --from-account`, `erpc rpc call`, `erpc webhook run`) | คีย์ทุกอันของบัญชีถูกปฏิเสธจากเครื่องนี้: คีย์สิ้นสุดอายุแล้ว บัญชีไม่มีแพ็กเกจ shared RPC ที่ใช้งานอยู่ หรือคีย์ถูกจำกัดไว้กับที่อยู่อื่น เช่น ที่อยู่ของเซิร์ฟเวอร์ | [ERPC Web Dashboard](https://dashboard.erpc.global/th) แสดงแพ็กเกจและวันสิ้นสุดของคีย์ และใช้สร้างคีย์ใหม่ สำหรับคีย์ที่ถูกจำกัดไว้กับที่อยู่ของเซิร์ฟเวอร์: `erpc worker secret put ERPC_API_KEY` โดยพิมพ์หรือ pipe ค่าเข้ามา |
| `shared: … HTTP 401` (bench) | shared RPC ปฏิเสธคีย์: ไม่มีแพ็กเกจ shared RPC ที่ใช้งานอยู่ หรือคีย์ไม่ถูกต้อง | ตรวจสอบแพ็กเกจในแดชบอร์ด หรือตั้งค่า `ERPC_API_KEY` |
| `shared: … HTTP 429` (bench) | การจำกัดอัตราของแพ็กเกจ | ใช้ `--interval 150` ขึ้นไป |

### การซื้อที่ erpc บันทึกไว้ไม่ได้

เมื่อเซิร์ฟเวอร์หรือสายข้อมูลอาจถูกเริ่มโดยคำขอก่อนหน้า ซึ่ง erpc บันทึกไว้ไม่ได้ ให้ดูเซิร์ฟเวอร์และสายข้อมูลของบัญชีคุณในแดชบอร์ด รับเซิร์ฟเวอร์มาใช้ด้วย `erpc worker deploy --vps <ID>` หรือยุติสิ่งที่ไม่ต้องการ จากนั้นลบรายการออกจาก `[env.<name>.starting]` ใน `erpc.toml` ด้วยตนเอง: erpc ไม่มี flag ที่ลบรายการนั้น และจนกว่าจะลบ คำสั่งเดิมจะส่งคำขอเดิม

## หากเซิร์ฟเวอร์อาจถูกยึดการควบคุม

1. รัน `erpc worker backup off` ก่อน เพื่อเพิกถอน access key สำหรับการสำรองข้อมูลของเซิร์ฟเวอร์ `off` ไม่ได้ย้อนกลับสิ่งที่เซิร์ฟเวอร์อ่านไปแล้ว
2. ย้ายเงินออกจากคีย์เทรดของเซิร์ฟเวอร์ และเปลี่ยน secret ของเซิร์ฟเวอร์ใหม่
3. Rebuild เซิร์ฟเวอร์จาก [ERPC Web Dashboard](https://dashboard.erpc.global/th) แล้ว deploy อีกครั้ง

หากการ Rebuild เปลี่ยน SSH host key ของเซิร์ฟเวอร์ erpc จะปฏิเสธเซิร์ฟเวอร์นั้นจนกว่าคุณจะอัปเดตคีย์ที่ pin ไว้ การ deploy นำโค้ดกลับมา แต่ไม่ได้นำ state ของแอปกลับมา ซึ่งมีเพียงการสำรองข้อมูลเท่านั้นที่เรียกคืนได้ ([สำรองข้อมูล state ของแอป](https://erpc.global/th/doc/erpc-cli/worker-status-and-billing/#สำรองข้อมูล-state-ของแอป))

## สิ่งที่ erpc ไม่ทำเด็ดขาด

- ใส่คีย์, secret หรือ URL ที่มีคีย์หรือ secret อยู่ ไว้ในบรรทัดคำสั่ง
- เขียนคีย์เทรดหรือ secret ของแอปลงไฟล์ โดยมีข้อยกเว้นเดียว คือ keystore ของ erpc บนเครื่องของคุณ ซึ่งแต่ละรายการถูกเข้ารหัสด้วยวลีรหัสผ่านของคุณ บนเซิร์ฟเวอร์ `erpc worker backup on` จะเก็บคีย์สำหรับการสำรองข้อมูลของเซิร์ฟเวอร์เองไว้ในไฟล์ที่เฉพาะ root เข้าถึงได้
- เริ่มสิ่งใดโดยไม่แสดงราคา
- ปล่อยให้เซิร์ฟเวอร์เปิดอยู่: ไฟร์วอลล์มีผลก่อนที่แอปจะเริ่มทำงานครั้งแรก
- เชื่อมต่อถึงเซิร์ฟเวอร์ที่ host key ไม่ตรงกับคีย์ที่ pin ไว้

[คู่มือ worker](https://github.com/elsoul/erpc-cli/blob/v0.1.0-rc.4/docs/worker.md) แสดงรายการข้อความทั้งหมด รวมถึงข้อความของ WAF
