解決 erpc worker 的故障

找到 erpc worker 所輸出訊息的開頭,並依照該列的說明處理。
本頁說明 ERPC CLI v0.1.0-rc.4,這是發行前版本。

錯誤訊息與處理方式

worker 的故障使用 erpc 的代碼與退出狀態:請參閱錯誤與退出碼。
訊息(開頭部分)原因處理方式
<app> cannot start without <SETTING>run.requires 指定了一個沒有任何地方設定的設定項erpc worker secret put <SETTING>、在 [vars] 中設定它,或使用會設定它的線路部署(--grpc、--unlimited)
your key was added but does not get inSSH agent 沒有簽署:1Password 處於鎖定狀態,或其請求未被允許解鎖 1Password、允許該請求,然後再次執行同一命令。它會接著執行
1Password could not …: authorization timeout1Password 要求核准,但沒有人回應在 1Password 中允許該請求,然後再次執行
<NAME> is empty; nothing was keptsecret put 讀到空的標準輸入:shell 不是終端機在終端機中執行,或以管道傳入值
the keystore is locked, and nobody is at a terminal …沒有終端機的命令需要金鑰庫,而且沒有保留解鎖狀態在終端機中執行 erpc worker secret unlock,然後再次執行該命令
nothing is kept under keystore:… on this machine該值保存在另一台機器的金鑰庫中在本機執行 erpc worker secret put <NAME> --replace;若是金鑰,請帶來那台機器的整個 keystore 目錄及其通行片語
release <id> failed: …; the server went back to <previous>新的 release 未通過健康檢查查看 erpc worker logs。上一個 release 仍在執行
… is locked: the trading key has not been handed over伺服器已重啟、agent 失敗或被終止後由 systemd 再次啟動,或執行了 stop --lockerpc worker start
port <n> is taken: …另一個保持執行的 worker 使用相同的健康檢查連接埠,或有其他程式在該連接埠上監聽在 erpc.toml 中為應用指定專屬的連接埠,然後再次部署
release <id> runs, and its WAF did not come up: …WAF 沒有開始監聽。最常見的情況是另一個程式佔用了 waf.port執行 erpc worker logs --waf,然後釋放該連接埠或變更 waf.port,再次部署。在此期間應用仍在執行
waf.<key> …(來自 check、deploy)某個 [waf] 鍵超出其範圍,或 waf.port 低於 1024,或是 run.port、SSH 或健康檢查所用的連接埠修正 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線路仍在設定中再次部署以繼續等待
OUT_OF_STOCK該區域沒有該方案的可用伺服器使用 --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另一台機器在此期間寫入了清單項目再次執行該命令
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)帳戶的每一組金鑰從本機送出時都被拒絕:金鑰已到期、帳戶沒有有效的共享 RPC 方案,或金鑰被限制只能從其他位址使用,例如伺服器的位址ERPC Web Dashboard 會顯示金鑰的到期日與方案,並可建立新的金鑰。對於限制只能從伺服器位址使用的金鑰:erpc worker secret put ERPC_API_KEY,以手動輸入或管道傳入
shared: … HTTP 401(bench)共享 RPC 拒絕了該金鑰:沒有有效的共享 RPC 方案,或金鑰錯誤在儀表板上檢查方案,或設定 ERPC_API_KEY
shared: … HTTP 429(bench)方案的限速使用 --interval 150 或更大的值

erpc 無法記錄的購買

當伺服器或線路可能已由 erpc 無法記錄的較早請求啟動時,請在儀表板中查看您帳戶的伺服器與線路。使用 erpc worker deploy --vps <ID> 接手伺服器,或結束不需要的項目。然後手動從 erpc.toml 的 [env.<name>.starting] 中移除該項目:erpc 沒有可移除它的旗標,在移除之前,同一命令會傳送同一個請求。

如果伺服器可能已被接管

  1. 先執行 erpc worker backup off,撤銷伺服器的備份存取金鑰。off 不會撤回伺服器已經讀取的內容。
  2. 將其交易金鑰中的資金轉走,並更換其 Secret。
  3. 從 ERPC Web Dashboard 重新建置伺服器,然後再次部署。
如果重新建置變更了伺服器的 SSH 主機金鑰,在您更新已固定的金鑰之前,erpc 會拒絕該伺服器。部署帶回的是程式碼,而不是應用的狀態資料;狀態資料只有備份才能恢復(備份應用的狀態資料)。

erpc 絕不會做的事

  • 將金鑰、Secret 或含有它們的 URL 放在命令列上。
  • 將交易金鑰或應用的 Secret 寫入檔案,只有一個例外:您機器上的金鑰庫,其中每一項都以您的通行片語加密。在伺服器上,erpc worker backup on 會將伺服器自己的備份金鑰留在僅限 root 的檔案中。
  • 在未顯示價格的情況下啟動任何項目。
  • 讓伺服器處於開放狀態:防火牆在應用首次啟動之前就已生效。
  • 連線到主機金鑰與已固定金鑰不符的伺服器。
worker 指南列出了所有訊息,包括 WAF 的訊息。