Claude Code无人值守部署教程
不少开发者希望在服务器上让 Claude Code 自动处理代码生成或审查任务,但它的默认模式是交互式终端,需要人工输入指令。
本文会一步步教你把它改成无人值守模式,并作为系统服务长期稳定运行。
理解无人值守场景与准备工作
无人值守在这里指:通过脚本或管道把任务指令传给 Claude Code,自动执行后从标准输出拿到结果。
常见场景包括:定时分析代码仓库、自动生成单元测试、批量修复 lint 错误等。
你需要准备:
- 一台 Linux 服务器(本文以 Ubuntu 22.04 为例)
- Node.js 16 或更高版本(推荐 18 LTS)
- Anthropic 账号与 API Key(从 console.anthropic.com 获取)
- 基本命令行操作能力(会执行命令即可)
安装 Claude Code CLI 并配置密钥
登录服务器后,先确保 Node.js 和 npm 已安装:
node -v # 检查版本
npm -v
如果未安装,用以下命令安装 Node.js 18:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
然后全局安装 Claude Code CLI:
npm install -g @anthropic-ai/claude-code
安装完成后,设置 API Key 环境变量(建议写入 ~/.bashrc 使其永久生效):
echo 'export ANTHROPIC_API_KEY="你的API密钥"' >> ~/.bashrc
source ~/.bashrc
验证密钥是否生效:
echo $ANTHROPIC_API_KEY
如果看到输出密钥字符串,说明配置成功。
编写自动化脚本实现非交互运行
Claude Code 支持通过 --non-interactive 参数接收管道输入并直接输出结果。
创建一个脚本 /opt/claude-auto.sh,内容如下:
#!/bin/bash
INPUT="$1"
echo "$INPUT" | claude-code --non-interactive 2>/dev/null
添加执行权限:
chmod +x /opt/claude-auto.sh
测试运行:
/opt/claude-auto.sh "Write a bash function to check disk usage"
你会看到 Claude Code 直接输出生成的代码(无交互提示)。
如果你需要持久化输出,可以在脚本中把结果重定向到文件:
echo "$INPUT" | claude-code --non-interactive > /tmp/claude_output.txt 2>/dev/null
配置 systemd 服务实现开机自启
为了让它长期在后台等待任务,我们可以创建一个 systemd 服务,把脚本作为守护进程运行。
首先创建服务文件 /etc/systemd/system/claude-auto.service:
[Unit]
Description=Claude Code Unattended Service
After=network.target
[Service]
Type=simple
User=your_username
ExecStart=/opt/claude-auto.sh ""
Restart=on-failure
RestartSec=5
Environment=ANTHROPIC_API_KEY=你的API密钥
[Install]
WantedBy=multi-user.target
注意将 your_username 替换为实际用户名,并将 API Key 直接写进 Environment 字段。
然后启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable claude-auto
sudo systemctl start claude-auto
检查状态:
sudo systemctl status claude-auto
如果看到 active (running) 说明服务运行正常。
不过上面的脚本默认没有持续任务,服务会立即退出,所以我们需要让脚本循环读取任务队列。
更实用的方式是把 Claude Code 集成到你的 CI/CD 或定时任务中,而不是做成常驻服务。
这里展示一个更合理的方案:使用 cron 定时执行脚本。
打开 crontab:
crontab -e
添加一行(每天凌晨三点执行一次):
0 3 * * * /opt/claude-auto.sh "Review all Python files in /var/www and suggest improvements" >> /var/log/claude_daily.log 2>&1
这样就能实现无人值守的自动化代码审查。
避坑指南与常见问题
- API 密钥泄露:不要将密钥写进脚本里提交到 Git。推荐使用环境变量或
.env文件加载。 - 非交互模式不生效:确保使用
--non-interactive参数,且输入通过管道传递。如果直接运行命令不加参数,会进入交互模式。 - 输出不完整:Claude Code 的输出可能包含退格符等控制字符。可以在脚本末尾用
cat或重定向时添加2>/dev/null过滤错误信息。 - 长时间无响应:检查网络连通性,确认服务器能访问 api.anthropic.com。也可以在脚本中添加超时处理:
timeout 30 claude-code ...。 - 内存不足:如果处理大文件,建议在服务器上设置 swap 或增加内存,否则 Node.js 进程可能被 OOM Killer 杀掉。
如果你在处理过程中遇到其他异常,建议先查看日志文件 /tmp/claude_output.txt 或系统日志 journalctl -u claude-auto。
希望这份教程能帮你顺利搭建 Claude Code 的无人值守环境。
根据你的实际任务调整输入指令和调度频率即可,遇到问题优先检查 API 配额和网络连接。