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 的意思、官方文件列出的結束原因(工作目錄未信任、登入、環境變數),以及停掉重試、讀日誌、手動執行的排查順序。
本文目錄
把 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。
修好之後怎麼驗收
- 手動執行成功,按
Ctrl+C結束,不要讓手動程序和服務同時存在。 - 啟動服務,
systemctl --user status顯示active (running)。 - 日誌裡有連線成功的訊息和你設定的
--name。 - 手機的 Claude App 或 claude.ai/code 看得到這個環境,可以開新工作。
- 完全關掉 SSH 再連回來,服務還在跑。
- 找一個沒有重要工作在跑的時段重開機,確認服務自動恢復。
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 拉起來,要看日誌確認。
延伸閱讀
- 看不懂程式也能架網站:我用 Claude Code + GitHub + Cloudflare 低成本架 Jason Finance 的方法與成本我看不懂程式碼,Jason Finance 是用 Claude Code、GitHub、Cloudflare Workers 和 Supabase 免費方案架起來的。整理整套架構、每個服務的用途與費用、我怎麼給 AI 權限,以及這種做法的限制。
- Git 可以 push,Claude Code 卻讀不到 GitHub Issues:SSH 與 GitHub API 權限的差別Claude Code GitHub Issues 讀不到,但 git push 正常?SSH key 只授權 Git 傳輸,Issues 和 PR 要另外的 API 認證。用 gh CLI 登入、確認權限、保護 token,並把 Issue 串成 PR 流程。
- 一台主機跑多個 Claude Code Remote Control:Linux user、systemd 與 git worktree 分工Claude Code 多個 Remote Control 跑在同一台主機:信任邊界不同就分 Linux user,每個環境一個 systemd service,同一個 repo 的開發和寫文章用 git worktree 分開,並說明 --spawn=worktree 的限制。

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