跳到主要內容
Jason Finance
AI 創業

Claude Code Remote Control exit code 1 怎麼辦:systemd 顯示 status=1/FAILURE 的原因與排查

Claude Code Remote Control exit code 1 代表 claude remote-control 自己以失敗結束。整理 systemd status=1/FAILURE 的意思、官方文件列出的結束原因(工作目錄未信任、登入、環境變數),以及停掉重試、讀日誌、手動執行的排查順序。

本文目錄
  1. 1.Claude Code Remote Control exit code 1 代表什麼
  2. 2.我遇到的情況
  3. 3.排查順序:停掉、讀日誌、手動執行
  4. 3.1先停掉失敗的那一個
  5. 3.2讀最近的日誌
  6. 3.3用同一個使用者、同一個目錄手動執行
  7. 4.官方文件列出的結束原因
  8. 4.1工作目錄還沒被信任:systemd 最容易踩到
  9. 4.2登入、方案與環境變數
  10. 4.3指令參數放錯位置
  11. 4.4網路中斷約 10 分鐘
  12. 5.手動能連線,交給 systemd 卻失敗
  13. 6.不要做的事
  14. 7.修好之後怎麼驗收
  15. 常見問題

把 Claude Code Remote Control 做成 systemd 服務之後,systemctl --user status 顯示 code=exited, status=1/FAILURE,服務啟動沒多久就結束。我在 2026 年 10 月的部署遇過這個 Claude Code Remote Control exit code 1:同一個 Linux 使用者底下,一個 Remote Control 正常連線,另一個起不來。

先說結論:exit code 1 只代表 claude remote-control 自己以失敗結束,不會告訴你原因。 先停掉那個服務,讀 journal,再用同一個使用者、同一個工作目錄手動執行,拿到具體的錯誤文字。官方文件寫明會以代碼 1 結束的情況裡,和 systemd 最相關的是工作目錄還沒被信任:沒有終端機可以回答信任問題,指令就直接結束。

本文是我 2026 年 10 月在 Oracle Cloud 的 Ubuntu 24.04(ARM64)主機上的部署紀錄,加上 Claude Code 與 systemd 官方文件的整理(2026 年 10 月 12 日查閱)。錯誤訊息與行為會隨 Claude Code 版本改變,以官方 Remote Control 文件為準。使用者和服務名稱都換成 project-a 這類範例。

Claude Code Remote Control exit code 1 代表什麼

systemd 的 systemd.exec 文件把 1 列為一般性的失敗(EXIT_FAILURE),沒有指定原因。200 以上的代碼才是 systemd 自己在啟動程序時出錯。看到的數字不同,問題出在不同的地方:

systemd 顯示 意思 先查什麼
status=1/FAILURE claude 已經啟動,再由它自己以失敗結束 日誌、手動執行時的錯誤訊息
status=200/CHDIR 切換到 WorkingDirectory= 失敗 目錄是否存在、使用者能否進入
status=203/EXEC 程式執行失敗,多半是找不到或無法執行執行檔 ExecStart= 的路徑,例如 ~/.local/bin/claude

所以 status=1/FAILURE 時,unit 檔裡的路徑和工作目錄通常已經對了,問題在 Claude Code 啟動之後。

我遇到的情況

我的服務用 claude remote-control --name ... --spawn=worktree 啟動,systemd 顯示 Loaded: ... enabled,但 Active: inactive (dead) (Result: exit-code),前面是 code=exited, status=1/FAILURE。同一時間,同一個 Linux 使用者的另一個 Remote Control 是 active (running),Linger=yes 也確認過。

我手上的日誌不足以確認這次的根因,所以這篇不寫「找到原因」,也不能因此說「同一個 Linux 使用者不能跑兩個 Remote Control」。下面是我後來整理的排查順序,以及官方文件列出的、會讓指令結束的原因。

排查順序:停掉、讀日誌、手動執行

以下在有 sudo 權限的管理員帳號(Ubuntu 預設的 ubuntu)執行。直接在 sudo -iu 的 shell 跑 systemctl --user 可能出現 No medium found,所以要指定使用者的 runtime 目錄和 D-Bus(原因見〈systemctl –user 出現 No medium found 怎麼辦〉)。

先停掉失敗的那一個

Restart=on-failure 會讓 systemd 一直重試,日誌被重複的啟動洗掉,也可能和你的手動測試同時跑。先停掉:

PROJECT_USER=project-a
SERVICE=claude-project-a-content.service
uid=$(id -u "$PROJECT_USER")

sudo -u "$PROJECT_USER" \
  XDG_RUNTIME_DIR="/run/user/$uid" \
  DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$uid/bus" \
  systemctl --user stop "$SERVICE"

只停出問題的那一個,其他正在跑的 Remote Control 不要動。

讀最近的日誌

不要只看 status 最後幾行:

sudo -u "$PROJECT_USER" \
  XDG_RUNTIME_DIR="/run/user/$uid" \
  DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$uid/bus" \
  journalctl --user -u "$SERVICE" -n 100 --no-pager

日誌可能含環境網址、session ID 或其他內部資訊,要貼給別人看之前先全文檢查。

用同一個使用者、同一個目錄手動執行

sudo -iu "$PROJECT_USER"
cd ~/projects/project-content
~/.local/bin/claude remote-control --name "Content Writer" --spawn=worktree

工作目錄要和 unit 檔的 WorkingDirectory= 相同,參數也要和 ExecStart= 相同。手動執行時如果出現 Enable Remote Control? (y/n) 或 Trust <directory>? [y/N],確認後回答 y。看到連線成功、手機或網頁也看得到環境,按 Ctrl+C 結束手動程序,退出這個使用者,再啟動 systemd 服務。

手動也失敗的話,保留具體的錯誤文字,對照下一節。官方文件還提供兩個工具:

  • claude remote-control --verbose:顯示詳細的連線和 session 紀錄。官方在「Remote credentials fetch failed」的排查裡用它看完整錯誤。
  • claude doctor:不開 session,印出安裝、設定檔和 Remote Control 資格的診斷,可以看是哪一項資格檢查沒過。

官方文件列出的結束原因

下面整理自 Claude Code 的 Remote Control 與錯誤訊息文件(2026 年 10 月 12 日查閱)。「代碼」欄寫的是官方明確寫出的結束代碼;官方只寫「結束並顯示錯誤」的,我不替它補數字。

情況 錯誤訊息(開頭) 官方寫的代碼
工作目錄沒信任過,而且沒有終端機可以問 Error: Workspace not trusted. 1
在 Trust <directory>? 回答 n 或直接按 Enter Remote Control did not start 1
啟動時的目錄已經被刪除或移走 The current directory no longer exists 1
無法建立 Claude Code 的私有暫存目錄 印在 stderr 的失敗訊息 1
沒有登入 claude.ai You must be logged in to use Remote Control. 未寫明
登入了,但用的是 API key 或 token Remote Control requires claude.ai subscription auth. 未寫明
在 Enable Remote Control? (y/n) 回答 n 不啟動 server,下次再問 未寫明
server mode 連不上網路約 10 分鐘 程序結束,要重新執行 未寫明

工作目錄還沒被信任:systemd 最容易踩到

官方文件說明,在還沒信任過的目錄執行 claude remote-control,它會先說明信任這個目錄會開啟什麼,再問 Trust <directory>? [y/N]。當標準輸入或輸出不是終端機時,它沒辦法問,就以 Workspace not trusted 錯誤、代碼 1 結束。 systemd 服務沒有終端機,正好是這種情況。

官方的處理方式是先在終端機信任這個目錄:在那裡執行 claude rc(claude remote-control 的別名)並回答 y,或執行 claude 接受信任對話框,再回頭啟動原本的指令。家目錄是例外,信任永遠不會被記住,要改在專案目錄啟動。

我那次沒有保留足夠的日誌,無法確認是不是這個原因。但如果你的情況是「手動可以、交給 systemd 就失敗」,或是用 git worktree add 開了新的工作目錄後才失敗,值得先查這一項:每個 WorkingDirectory= 都先用同一個使用者在終端機手動跑過一次。

登入、方案與環境變數

  • 沒登入或不是訂閱登入:Remote Control 支援 Pro、Max、Team、Enterprise 方案,不支援 API key。官方的處理是執行 claude auth login,選 claude.ai 登入。
  • ANTHROPIC_API_KEY 或 ANTHROPIC_AUTH_TOKEN:錯誤訊息會指出是哪一個,要從 shell 環境或設定檔的 env 區塊移除。systemd 服務的環境和你的互動 shell 不一樣,unit 檔裡的 Environment= 也要一起看。
  • Team、Enterprise 方案:要由 Owner 在 Claude Code 管理設定開啟 Remote Control,預設是關的;沒開時會出現和組織政策有關的錯誤。
  • 方案剛變更:官方建議 claude auth logout 再 claude auth login 重新整理。
  • 其他環境變數:ANTHROPIC_BASE_URL 指到 api.anthropic.com 以外的主機,或設了 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_GROWTHBOOK,Remote Control 都無法使用。

指令參數放錯位置

官方文件說明,把 --settings、--permission-mode 這類會影響 session 的全域參數放在 remote-control 前面,Claude Code 會拒絕啟動並指出是哪個參數。Remote Control 自己的參數要放在 remote-control 後面;要設定權限模式,用 claude remote-control --permission-mode <mode>。

網路中斷約 10 分鐘

server mode 下,主機醒著但連不上網路約 10 分鐘後,Claude Code 會放棄,claude remote-control 程序結束,要重新執行。官方沒有寫這種情況的結束代碼。Restart=on-failure 會不會把它拉起來,取決於程序怎麼結束,要從 journal 確認,不要假設 systemd 能處理所有斷線。

手動能連線,交給 systemd 卻失敗

手動執行和 systemd 執行,差在這幾個地方:

差別 手動執行 systemd 服務 怎麼處理
終端機 有,可以回答 Enable Remote Control?、Trust <directory>? 沒有 先用同一個使用者、同一個目錄手動跑一次,把問題都回答掉
工作目錄 你 cd 進去的目錄 WorkingDirectory= 兩者要完全相同
HOME、PATH 登入 shell 設好的 unit 檔的 Environment= 確認 HOME 指向該使用者,PATH 含 ~/.local/bin
登入資料 該使用者的 ~/.claude/ 同一份,前提是 HOME 正確 不要把別的使用者的 ~/.claude/ 複製過來
環境變數 shell 裡的設定 只有 unit 檔給的 比對兩邊有沒有 ANTHROPIC_API_KEY 這類變數

Enable Remote Control? (y/n) 在沒有終端機時會怎樣,官方文件沒有寫;保險的做法一樣是先手動回答過。

不要做的事

  • 不要一直 restart:activating (auto-restart) 代表 systemd 已經在重試。一直手動重啟只會讓日誌更亂。
  • 不要先猜原因:沒有錯誤文字前,不要認定是 OAuth、網路或同時 session 的上限。官方的 --capacity 是同時 session 的上限,預設 32;錯誤訊息沒有指向它之前,不要認定是上限的問題。
  • 不要刪登入資料重來:清掉 ~/.claude/ 或重新授權之前,先確認錯誤訊息真的指向登入。
  • 不要一次重啟全部服務:只處理失敗的那一個,避免中斷其他環境正在跑的工作。
  • 不要貼出 token:日誌和截圖先檢查有沒有網址、token、session ID。

修好之後怎麼驗收

  1. 手動執行成功,按 Ctrl+C 結束,不要讓手動程序和服務同時存在。
  2. 啟動服務,systemctl --user status 顯示 active (running)。
  3. 日誌裡有連線成功的訊息和你設定的 --name。
  4. 手機的 Claude App 或 claude.ai/code 看得到這個環境,可以開新工作。
  5. 完全關掉 SSH 再連回來,服務還在跑。
  6. 找一個沒有重要工作在跑的時段重開機,確認服務自動恢復。

active (running) 只能證明程序存在,有沒有真的連上,要看日誌和環境清單。主機、安裝和第一個常駐服務的完整步驟,見〈Oracle Cloud 架 Claude Code Remote Control 常駐教學〉;同一台主機跑多個環境怎麼分使用者和 worktree,見〈一台主機跑多個 Claude Code Remote Control〉;主機是 ARM64 時安裝要注意什麼,見〈Claude Code ARM64 安裝:Oracle Ampere A1 跑得動嗎〉。

常見問題

Claude Code Remote Control 的 exit code 1 是什麼意思?

systemd 顯示 code=exited, status=1/FAILURE,代表 claude remote-control 程序自己以代碼 1 結束。1 在 systemd 文件裡是一般性的失敗,本身不說明原因,真正的原因要看日誌,或用同一個使用者、同一個目錄手動執行看錯誤訊息。

為什麼手動執行可以連線,交給 systemd 就 exit code 1?

一個官方文件寫明的原因是工作目錄還沒被信任:claude remote-control 在沒信任過的目錄會問 Trust <directory>? [y/N],systemd 底下沒有終端機可以回答,指令就會以 Workspace not trusted 錯誤、代碼 1 結束。其他要比對的差別包括 HOME、PATH、工作目錄和登入狀態。

Remote Control 一直 status=1/FAILURE,第一步該做什麼?

先停掉那個失敗的服務,避免 systemd 一直重試干擾判斷;接著用 journalctl --user 讀最近 100 行日誌,再切到同一個 Linux 使用者和工作目錄,手動執行同一條 claude remote-control 指令,拿到具體的錯誤文字。

status=200/CHDIR 或 203/EXEC 和 status=1 有什麼不同?

200/CHDIR 和 203/EXEC 是 systemd 自己的代碼:200 是切換到 WorkingDirectory 失敗,203 是程式執行失敗,多半是找不到執行檔。status=1 則是 claude 已經啟動,再由它自己以失敗結束。

設了 ANTHROPIC_API_KEY 會讓 Remote Control 啟動失敗嗎?

會出現錯誤。官方文件寫明,Remote Control 只支援 claude.ai 訂閱登入;環境裡設了 ANTHROPIC_API_KEY 時,會出現 Remote Control requires claude.ai subscription auth.,要把這個變數從 shell 環境或設定檔的 env 區塊移除,再用 claude auth login 登入。

網路斷掉會讓 claude remote-control 結束嗎?

官方文件說明,server mode 下主機連不上網路約 10 分鐘後,claude remote-control 程序會結束,要重新執行。這種結束會不會被 Restart=on-failure 拉起來,要看日誌確認。

延伸閱讀

關於作者

Jason 的照片

Jason

Google 大客戶銷售客戶經理、哥倫比亞大學 MBA 錄取,分享自己實際用過的理財工具與經驗。

留言

使用 Google 登入即可留言。留言「不會」使用您的 Google 頭像或姓名,對外顯示的暱稱是系統隨機產生的代號,以保護您的隱私。

登入即表示你同意本站的隱私權政策。

  1. 載入留言中…