查看: 3309|回复: 3

WSL 2 后台保活实践:让 Hermes Agent 持续运行不再被终端关闭打断

[复制链接]
发表于 2026-6-5 10:32:43 | 显示全部楼层 |阅读模式
WSL 2 作为轻量级 Hyper-V 虚拟机,其默认行为是当没有活跃的 Linux 进程或终端会话时自动关闭,以释放系统资源。这一机制对于长期运行的后台服务(如 Hermes Agent)而言,意味着一旦关闭 PowerShell 或 Windows Terminal,WSL 实例就会退出,导致服务中断。本文基于实际开发场景,提供一套低资源占用且稳定的保活方案,结合 systemd 实现服务的自动启动与持久运行。

首先理解 WSL 2 的终止条件:当虚拟机内没有运行中的 Linux 进程、没有活跃的终端连接,或超过空闲超时阈值时,WSL 2 会自动终止。常见的粗暴保活方式(如在前台执行 sleep infinity)虽然有效,但会持续占用 CPU 与内存资源,不够优雅。

推荐的最佳实践是启动一个轻量级守护进程来模拟“有进程在运行”的状态,从而阻止 WSL 自动关闭。具体方案是使用 dbus-launch 命令。核心命令如下:
  1. @start /b wsl --exec dbus-launch true
复制代码
此命令中,start /b 使得命令在后台静默运行且不弹出新窗口;--exec 参数直接执行指定命令而不启动交互式 Shell;dbus-launch true 则会启动 D-Bus Session Bus 守护进程(true 命令立即退出),但守护进程本身会持续存在,让 WSL 误以为仍有进程活动,从而保持虚拟机活跃。该方式资源占用极低,是目前最优雅的 WSL 后台保活手段。

实施步骤分为两步:创建开机自启动脚本,以及配置 systemd 管理服务。

第一步,创建开机自启动文件。按 Win + R 输入 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup 打开启动文件夹,新建一个文本文件并命名为 wslstart.cmd,内容如下:
  1. @echo off
  2. :: 保持 WSL 后台运行,供 Hermes Agent 使用
  3. start /b wsl -d Ubuntu --exec dbus-launch true
复制代码
请将 Ubuntu 替换为你实际安装的发行版名称(可通过 wsl -l -v 查看)。保存后重启电脑,WSL 将自动在后台启动并保持运行。

第二步,配置 systemd 管理服务,使 Hermes Agent 能够随 WSL 自动启动并崩溃后自动重启。WSL 2 自 2022 年起已原生支持 systemd,启用方法为编辑 /etc/wsl.conf:
  1. sudo vim /etc/wsl.conf
复制代码
在文件中添加以下内容:
  1. [boot]
  2. systemd=true
复制代码
保存后,在 Windows 中执行 wsl --shutdown 再重新启动 WSL,systemd 即可生效。接着安装 Hermes Agent 时,使用如下命令自动创建 systemd 服务:
  1. sudo hermes gateway install --system
复制代码
之后可以通过以下命令查看服务状态:
  1. sudo systemctl status hermes-gateway.service
复制代码
常用管理命令包括:查看发行版状态(wsl -l -v)、强制关闭 WSL 实例(wsl --shutdown)、启动特定发行版(wsl -d Ubuntu)。推荐使用 Windows Terminal 作为日常终端,它支持多标签页和 WSL 集成,操作更便捷。

通过上述组合方案,wslstart.cmd 配合 dbus-launch 保持 WSL 虚拟机常驻,systemd 则确保 Hermes Agent 在 WSL 内部以服务形式自动启动、崩溃后自动恢复。即使关闭所有终端窗口,甚至注销 Windows 用户,Hermes Agent 依然能在后台稳定运行。这一思路同样适用于其他需要在 WSL 2 中持续运行的后台任务或守护进程。
回复

使用道具 举报

发表于 2026-6-5 10:40:00 | 显示全部楼层

Re: WSL 2 后台保活实践:让 Hermes Agent 持续运行不再被终端关闭打断

这个方案很实用,感谢分享。我之前也试过用 sleep infinity 保活,确实太费资源了。用 dbus-launch 的思路挺巧妙,既轻量又能骗过 WSL 的检测机制。配合 systemd 管理服务也正好解决了服务随系统自启的问题,整体方案很完整。我准备按你的步骤在自己的 Ubuntu 发行版上试一下,顺便把其他几个后台脚本也这么安排上。
回复 支持 反对

使用道具 举报

发表于 2026-6-21 14:20:02 | 显示全部楼层

Re: WSL 2 后台保活实践:让 Hermes Agent 持续运行不再被终端关闭打断

感谢分享这么详细的方案!之前一直用 `sleep infinity` 保活,确实觉得太占资源,而且手动管理麻烦。`dbus-launch true` 的思路很巧妙,资源占用低,配合开机启动脚本和 systemd 基本实现了一劳永逸。准备按你的步骤把 Hermes Agent 也迁移过来,这样再也不用担心关掉终端后服务中断了。对 WSL 2 的终止逻辑和保活原理讲得很清楚,收藏了!
回复 支持 反对

使用道具 举报

发表于 2026-6-21 16:35:00 | 显示全部楼层

Re: WSL 2 后台保活实践:让 Hermes Agent 持续运行不再被终端关闭打断

感谢楼主的详细分享!之前一直为 WSL 2 后台服务中断的问题头疼,试过 sleep infinity 确实太占用资源。用 dbus-launch true 这个思路很巧妙,既轻量又能骗过 WSL 的进程检测机制。搭配 systemd 管理服务也正好补齐了自动启动和崩溃恢复的短板,整套方案非常实用。准备就去把 wslstart.cmd 加到启动项试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-20 15:34 , Processed in 0.025667 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部