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 头像或姓名,对外显示的昵称是系统随机生成的代号,以保护您的隐私。
登录即表示你同意本站的隐私政策。