【WSL】让WSL2后台持久运行不自动关闭的解决方案

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:直接执行命令,不启动交互式 Shell
  • dbus-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 服务 。

  1. 启用 systemd:执行 sudo vim /etc/wsl.conf,添加 [boot] 段并设置 systemd=true
  2. 创建服务文件:安装 Hermes Agent 后运行 sudo hermes gateway install --system,会自动创建 systemd 服务 。
  3. 查看服务: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 文件方便你保存吗?

相关推荐
企鹅的蚂蚁21 小时前
LubanCat RK3588 实时 Linux 开发(七):YT6801 PCIe 网卡驱动移植与 vermagic 排查
linux·rk3588·linux驱动·yt6801·pcie网卡·vermagic
DYWorker00121 小时前
Linux驱动子系统:DMA子系统 —— Consumer和Provider(006)
linux·驱动开发
byte轻骑兵21 小时前
【BlueZ】 log 模块:日志系统的实现与自定义日志输出配置
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
探索云原生1 天前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go
一技安身1 天前
【信创】docker-26.0.2.tgz 原理 + 完整安装
linux·运维·服务器
程曦曦1 天前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
赵民勇1 天前
systemd-mount命令详解
linux
H_oRIZoN_1 天前
Linux入门DAY42【51 单片机】DS18B20 数字温度传感器完整解析(单总线原理 + 时序 + 读取流程)
linux·单片机·linux应用编程
j7~1 天前
【Linux网络加餐】(篇六)网络版计算器(上):模板方法模式、序列化与 JSON
linux·c++·json·序列化·反序列化·网络版计算机
流浪0011 天前
Linux系统篇34——信号(六):信号处理期间又来了怎么办?——sigaction、sa_mask、可重入函数与 volatile
linux·运维·面试·操作系统·信号处理·信号