跳到主要内容
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. 加载留言中…