1. 问题背景
在 WSL 2 上开发和运行 Python 项目时,关闭 PowerShell 或 Windows Terminal 后 WSL 会自动退出,导致正在运行的 Hermes Agent 一并停止 。这是 WSL 2 的默认行为------当虚拟机内没有活跃 Linux 进程时,它会自动关闭以节省资源 。
2. WSL 2 终止机制原理
WSL 2 本质是一个轻量级 Hyper-V 虚拟机,满足以下任一条件时就会自动终止 :
- 没有正在运行的 Linux 进程
- 没有活跃的终端会话
- 超过空闲超时
用 sleep infinity 这类粗暴方式虽可行但资源占用高,最佳实践是启动一个轻量级守护进程(如 D-Bus)来保活 。
3. 最佳保活方案:dbus-launch
核心启动命令如下 :
cmd
@start /b wsl --exec dbus-launch true
参数说明 :
start /b:后台静默运行,不弹出窗口--exec:直接执行命令,不启动交互式 Shelldbus-launch true:启动 D-Bus Session Bus 守护进程(true命令立即退出),让 WSL 认为有进程在运行,从而保持虚拟机活跃
该方案资源占用极低,是目前最优雅的 WSL 后台保活方式 。
4. 完整实施步骤
按 Win + R,输入路径 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup 打开启动文件夹 。新建文件 wslstart.cmd,内容如下(把 Ubuntu 替换为你实际的发行版名称):
bash
@echo off
:: 保持 WSL 后台运行,供 Hermes Agent 使用
start /b wsl -d Ubuntu --exec dbus-launch true
重启电脑后,WSL 将自动在后台运行 。
5. 连接到后台 WSL 实例
推荐使用 Windows Terminal 作为日常终端,连接命令有以下几种 :
bash
wsl # 最简单方式
wsl -d Ubuntu # 指定发行版
wsl -d Ubuntu -u wanjing # 指定用户名
6. 用 systemd 管理 Hermes Agent
WSL 2 已原生支持 systemd,推荐用它管理 Hermes Agent 服务 。
- 启用 systemd:执行
sudo vim /etc/wsl.conf,添加[boot]段并设置systemd=true。 - 创建服务文件:安装 Hermes Agent 后运行
sudo hermes gateway install --system,会自动创建 systemd 服务 。 - 查看服务:
sudo systemctl status hermes-gateway.service。
7. 常用管理命令
perl
wsl -l -v # 查看 WSL 状态
wsl --shutdown # 完全关闭 WSL(释放资源)
wsl -d Ubuntu # 连接到后台实例
来源:文中列出的常用管理命令 。
8. 总结方案
通过两项组合即可彻底解决 WSL 退出问题 :
wslstart.cmd+dbus-launch→ 保持 WSL 后台常驻systemd服务 → 让 Hermes Agent 自动、重启、持久运行
这样即使关闭所有终端窗口甚至注销 Windows,Hermes Agent 依然能在后台稳定运行 。
需要我把这份整理导出成 Markdown 文件方便你保存吗?