前言:断连即停的烦恼

最近在做科研项目时,我习惯用 Mac 通过 SSH 连接到远程服务器,然后在服务器上装个 VSCode 的 Codex 扩展来写代码。Codex 的 Goal 模式确实好用,下达目标后它能自动生成代码、调试、优化,简直像配了个 AI 助手。

但问题来了:一旦我的 Mac 合盖睡眠,或者手动断开 SSH 连接,Codex 的 Goal 模式就会立刻停止工作。这意味着我得时刻保持 VSCode 连接,哪怕是通宵跑任务也不敢合盖——这显然不是长久之计。

Tmux 终端会话示意图

Tmux 允许在单一终端窗口中分割屏幕并保持会话持久化,SSH 断开后程序继续运行。

今天就来聊聊如何解决这个问题,让 Codex 在服务器端独立运行,不依赖本地的持续连接。


方法一:用 Tmux 或 Screen 保持 SSH 会话

最直接的思路是:本地 SSH 断开不影响服务器端的运行。Tmux 和 Screen 是常用的终端会话管理工具,可以让程序在后台持续运行。

VSCode 远程连接架构图

VSCode Remote SSH 架构示意图,展示本地客户端与服务器端 Code-Server 的连接关系。

1. 安装 Tmux(服务器端)

sudo apt-get install tmux  # Ubuntu/Debian
sudo yum install tmux      # CentOS/RHEL

2. 创建持久化会话

tmux new -s codex_session  # 创建一个名为 codex_session 的会话

3. 在 Tmux 会话中启动 VSCode Remote

直接在 Tmux 会话里用 code-server 或通过 VSCode Remote SSH 连接,然后启动 Codex 的 Goal 模式。

4. 分离会话

Ctrl+B 然后输入 d(detach),即可安全退出 Tmux 会话。此时即使本地的 SSH 或 VSCode 断开,服务器端的任务也不会中断。

5. 重新连接

下次需要查看进度时:

tmux attach -t codex_session

优点:简单通用,适合任何终端命令行工具。 缺点:需要手动管理会话,VSCode 的图形界面体验可能受限。


方法二:直接让 VSCode Server 后台运行

VSCode Remote SSH 的核心是服务器端的 vscode-server 进程。只要这个进程不挂,扩展就能继续工作。以下是具体步骤:

1. 找到 VSCode Server 的安装路径

通常在 ~/.vscode-server 目录下:

ls ~/.vscode-server

2. 启动 VSCode Server 后台进程

手动启动 VSCode Server 绑定到本地端口:

nohup ~/.vscode-server/bin/<commit-id>/bin/code-server --host 0.0.0.0 --port 8080 > /dev/null 2>&1 &

<commit-id> 替换为你实际的 VSCode Server 版本号(可在目录名中找到)。

3. 本地通过 SSH 隧道连接

在本机 Mac 上运行:

ssh -L 8080:localhost:8080 user@remote-server

然后打开浏览器访问 http://localhost:8080,即可使用 Web 版 VSCode,且即使断开 SSH 隧道,服务器端的 VSCode 仍在后台运行。

优点:保留完整的 VSCode 界面和扩展体验。 缺点:配置稍复杂,需手动管理进程生命周期。


方法三:用 Systemd 管理 VSCode Server(推荐)

如果你希望 VSCode Server 像 Linux 服务一样稳定运行,可以用 systemd 托管:

1. 创建 systemd 服务文件

sudo nano /etc/systemd/system/vscode-server.service

写入以下内容(替换 <user><commit-id>):

[Unit]
Description=VSCode Server
After=network.target

[Service]
Type=simple
User=<user>
ExecStart=/home/<user>/.vscode-server/bin/<commit-id>/bin/code-server --host 0.0.0.0 --port 8080
Restart=always

[Install]
WantedBy=multi-user.target

2. 启动并设置开机自启

sudo systemctl daemon-reload
sudo systemctl start vscode-server
sudo systemctl enable vscode-server

以后无论你是否连接,服务器端的 VSCode 都会稳定运行。


方法四:用 code-tunnel 官方案例

VSCode 提供了官方的 code-tunnel 工具,专为远程访问设计:

  1. 服务器端安装 code-tunnel
    curl -Lk 'https://code.visualstudio.com/download/tunnel' -o code-tunnel
    chmod +x code-tunnel
    
  2. 启动隧道:
    ./code-tunnel --accept-server-license-terms
    
  3. 按提示登录后,即使本地断开,隧道仍会保持活跃。

优点:微软官方支持,安全性高。 缺点:需要网络环境稳定。


总结:按需选择

  • 临时任务:用 Tmux/Screen 快速解决。
  • 长期稳定运行:推荐 Systemd 托管 VSCode Server。
  • 追求官方方案:试试 code-tunnel

现在,即便我合上 Mac 去睡觉,服务器端的 Codex 依然在默默干活,第二天早上起来直接检查成果——这才是程序员该有的姿势!

标签: none

评论已关闭