wsl2 运行后台守护进程需先启用 wsl2 并设为默认版本,再通过配置 /etc/wsl.conf 启用 systemd,最后重启 wsl2 使 ps -p 1 显示 systemd 进程。
直接用 wsl2 运行后台守护进程,本质是绕开 windows 服务管理器,靠 linux 的 systemd + windows 的进程托管双层保障来实现“开机自启、崩溃恢复、无窗口运行”。它不是替代 windows 服务的通用方案,而是针对特定 linux 生态工具(比如 openclaw、node.js 网关、python flask api、docker compose 应用等)的轻量级、开发友好的落地方式。
确保 WSL2 已正确启用并设为默认版本
这是所有后续操作的前提。若未完成,systemd 就无法启用,服务也就无从谈起。
- 以管理员身份打开 PowerShell,执行:
wsl --install(推荐一键安装)
或分步启用:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all - 重启电脑
- 重启后执行:
wsl --set-default-version 2 - 确认状态:
wsl -l -v → 输出中 Ubuntu(或其他发行版)对应 VERSION 列应为 2
在 WSL2 内启用 systemd 支持
WSL2 默认不启动 systemd,需手动配置。这是让服务能“开机自启+自动拉起”的核心。
- 编辑 WSL2 全局配置文件:
nano /etc/wsl.conf - 写入以下内容(如不存在则新建):
[boot]
systemd=true - 保存退出(Ctrl+O → Enter → Ctrl+X)
- 关闭当前 WSL2 实例:
wsl --shutdown - 重新启动 WSL2(例如运行 ubuntu 或 wsl),再检查:
ps -p 1 → 输出应含 systemd,而非
创建并启用你的守护进程服务
以 OpenClaw 为例,但逻辑适用于任意 CLI 启动的长期运行程序(如 pm2、forever、uvicorn、supervisord 管理的进程)。
- 假设你已安装好 openclaw 命令(全局 npm 安装),且用户名为 devuser:
创建服务文件:
sudo nano /etc/systemd/system/openclaw.service - 填入标准配置(注意替换 User 和 WorkingDirectory):
[Unit]
Description=OpenClaw Gateway
After=network.target
[Service]
User=devuser
Group=devuser
WorkingDirectory=/home/devuser
ExecStart=/usr/bin/node /home/devuser/.npm-global/bin/openclaw gateway --force
Restart=always
RestartSec=3
StartLimitIntervalSec=0
[Install]
WantedBy=multi-user.target - 重载配置并启用:
sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw - 验证:
sudo systemctl status openclaw → 显示 active (running) 即成功
让 WSL2 自身随 Windows 启动并保持活跃
systemd 能保服务,但 WSL2 实例本身可能被 Windows 休眠或闲置关闭。需加一层 Windows 级别守护。
- 下载 NSSM(nssm.cc/download),解压后取 nssm.exe
- 以管理员身份运行命令提示符,执行:
nssm install wsl2-autostart - 在 GUI 中填写:
• Path: C:\Windows\System32\wsl.exe
• Startup directory: C:\
• Arguments: --distribution Ubuntu --exec bash -c "sleep infinity"(替换成你的发行版名) - 点击 Install service,完成后启动该服务:
net start wsl2-autostart - 这样 WSL2 实例就常驻后台,systemd 才有持续运行环境











