cc-connect 调用 claude 无输出的问题排查与解决
问题描述
使用 cc-connect 连接飞书机器人时,消息可以收到,但 Claude Code 进程运行后没有任何输出,日志显示 agent process exited 但 response_len=0。
排查过程
1. 确认服务状态
1 | ps aux | grep cc-connect | grep testuser |
服务都在运行,proxy 返回正常。
2. 测试 claude 命令
手动执行 claude -p hi 发现:
- 以 root 用户运行:有输出
- 以 testuser 运行(
su testuser -c):无输出
3. 检查环境变量
cc-connect 使用 su testuser -c 启动 claude 进程,这是一个非登录 shell,不会加载 .bash_profile。
testuser 的 .bashrc 和 .profile 中没有设置 ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_BASE_URL,导致 claude 无法调用 API。
4. 根本原因
cc-connect 在 config.toml 中配置了 mode = "bypassPermissions",会调用 claude 命令。但:
su testuser -c不会加载登录 shell 环境- wrapper 脚本
/home/testuser/cc_bin/claude里设置的环境变量不会被 cc-connect 使用 - 进程 PATH 中没有 node 路径(node 在 root 的 nvm 目录下)
解决方案
1. 创建全局 wrapper 链接
1 | ln -sf /home/testuser/cc_bin/claude /usr/local/bin/claude |
2. 修改 wrapper 脚本
1 |
|
关键点:
- 添加
/root/.nvm/versions/node/v22.22.0/bin到 PATH(testuser 无法访问 root 的 nvm bin 目录) - 直接 exec claude.exe 避免 symlink 递归
3. 设置系统级环境变量
在 /etc/environment 中添加:
1 | ANTHROPIC_AUTH_TOKEN="your-api-token" |
验证
重启 cc-connect 后测试:
1 | # 本地测试 |
日志中看到 turn complete 且 response_len > 0 即表示正常。
相关文件
- cc-connect 配置:
/home/testuser/.cc-connect/config.toml - claude wrapper:
/home/testuser/cc_bin/claude - claude-model-proxy:
/home/testuser/claude-model-proxy.js - 运行日志:
/home/testuser/.cc-connect/cc-connect.log - proxy 日志:
/home/testuser/.claude-proxy.log
经验总结
- 环境变量问题:非登录 shell 不会加载
.bash_profile,设置环境变量要确保在 wrapper 脚本中 export - PATH 问题:
su user -c使用的 minimal PATH,需要手动添加所需路径 - node 路径:nvm 安装在 root 下,testuser 无法直接访问,需要在 wrapper 中显式添加
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 DeepThinking深思!
评论
