在云端运行AI代理(如Claude Code)的开发者,几乎都经历过这种崩溃瞬间:让Agent在服务器上执行一个长任务(比如全自动跑测试、分析整个代码库),结果本地网络波动,SSH连接一断,或者你手滑关掉了终端窗口,正在运行的Claude Code瞬间被挂断,跑了半小时的进度直接清零。
因为传统的SSH会话是绑定在终端(TTY)上的。一旦连接断开,系统会向该会话下的所有进程发送`SIGHUP`信号,直接终止它们。
要让Claude Code在VPS上7×24小时常驻,不再受本地网络状态的影响,你需要一套组合拳:用tmux维持交互式会话,用systemd管理后台守护进程。
方案一:tmux——拯救你的交互式会话
如果你需要随时进入Claude Code的界面查看进度、干预提示词,`tmux`是最完美的解决方案。它允许多个终端复用同一个会话,并且支持“分离(detach)”和“重连(attach)”。
1.安装tmux
登录你的Jtti VPS,执行安装命令:
Ubuntu/Debian
sudo apt update&&sudo apt install tmux-y
CentOS/Rocky
sudo yum install tmux-y
2.创建专属会话并运行Claude Code
tmux new-s claude_agent
进入tmux界面后,像平时一样启动你的Claude Code。此时,无论你在这个窗口里执行什么操作,都会安全地在这个虚拟终端内进行。
3.安全“挂起”与重连
当任务执行到一半你需要下班,或者网络开始波动时,按下组合键`Ctrl+B`,松开后按`D`(Detach)。此时你会退回到VPS的普通命令行,但Claude Code仍在tmux后台继续运行。
当你再次连上VPS,只需执行:
tmux attach-t claude_agent
就能瞬间回到之前的工作现场,进度分毫不差。
方案二:systemd——让AI代理像系统服务一样常驻
如果你的需求是完全无人值守——比如让Claude Code在后台监听某个队列,或者定时执行自动化重构任务,那么更工程化的做法是把它写进`systemd`服务。这样不仅可以开机自启,如果它意外崩溃,系统还会自动把它拉起来。
1.创建一个启动脚本
为了配合systemd,建议写一个包装脚本`run_claude.sh`:
!/bin/bash
cd/home/developer/project
假设Claude Code通过npx运行
npx@anthropic-ai/claude-code--non-interactive
2.编写systemd服务文件
使用root或sudo权限创建`/etc/systemd/system/claude.service`:
```ini
[Unit]
Description=Claude Code Background Agent
After=network.target
[Service]
强烈建议使用非root用户运行
User=developer
WorkingDirectory=/home/developer/project
ExecStart=/home/developer/run_claude.sh
意外崩溃时自动重启
Restart=always
RestartSec=10
资源限制
MemoryMax=4G
[Install]
WantedBy=multi-user.target
3.启动并设为开机自启
sudo systemctl daemon-reload
sudo systemctl enable claude.service
sudo systemctl start claude.service
之后,你可以随时用`journalctl-u claude-f`查看日志,所有运行状态一目了然。
让AI代理在云端常驻,最怕的不是脚本没写好,而是服务器网络本身不稳定。需要注意的是如果VPS的线路在晚高峰频繁丢包,Claude Code在调用远端API时就会不断超时重试,甚至导致会话阻塞。