wsl2默认不运行systemd,需通过修改/etc/wsl.conf启用systemd=true并执行wsl --shutdown重启,再配置systemd服务单元实现开机自启、崩溃自愈与日志管理。
wsl2 默认不运行 systemd,所以服务无法真正后台常驻——关掉终端、重启 windows,服务就停了。要让它像真实 linux 服务器一样稳定运行,核心是两步:让 wsl2 启动时以 systemd 为 pid 1,并配置对应的服务单元。
确认 WSL2 版本和内核支持
systemd 支持从 WSL2 v0.67.6 起正式引入,Windows 11 22H2 及之后版本默认满足。先验证:
- 在 PowerShell(管理员)中运行:
wsl --version,输出版本号 ≥ 0.67.6 - 运行:
wsl -l -v,确认你的发行版状态为 Running 或可启动 - 若提示命令未识别或返回帮助页,说明 WSL 版本过旧,需执行
wsl --update或手动升级
启用 systemd(修改 /etc/wsl.conf)
这是最关键的一步。systemd 不是“安装”出来的,而是通过配置触发 WSL2 内核启动时加载它作为 init 进程。
- 在 WSL2 终端中编辑配置文件:
sudo nano /etc/wsl.conf - 写入以下内容(必须严格按格式,无空行、无多余空格):
systemd=true
[network]
generateHosts=true
generateResolvConf=false
[automount]
enabled=true
options="metadata"
mountFsTab=true
-
generateResolvConf=false防止 WSL 覆盖 DNS 配置,避免服务联网异常 - 保存后,**必须彻底退出 WSL**:在 PowerShell 中运行
wsl --shutdown,再重新启动终端 - 启动后执行
ps -p 1 -o comm=,输出应为 systemd;再运行systemctl is-system-running,返回 running 即成功
部署你的服务(以 openclaw-gateway 为例)
有了 systemd,你就可以定义标准 service 单元,实现开机自启、崩溃自动拉起、日志可查。
- 创建服务文件:
sudo nano /etc/systemd/system/openclaw.service - 填入配置(注意替换
your_username和实际路径):
Description=OpenClaw Gateway
After=network.target
[Service]
User=your_username
Group=your_username
WorkingDirectory=/home/your_username
ExecStart=/usr/bin/node /home/your_username/.npm-global/bin/openclaw gateway --force
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
- 重载配置:
sudo systemctl daemon-reload - 启用开机自启:
sudo systemctl enable openclaw - 立即启动:
sudo systemctl start openclaw - 检查状态:
sudo systemctl status openclaw,看到 active (running) 且无报错即生效
确保 Windows 启动时自动拉起 WSL2
即使 systemd 已启用,WSL2 实例本身仍需被 Windows 触发启动。推荐两种可靠方式:
-
方案一(推荐):用 NSSM 创建 Windows 服务
下载 NSSM(nssm.cc),以管理员身份运行:nssm install wsl-openclaw→ 设置路径为wsl.exe,参数为-d your-distro-name -u root -e systemctl start multi-user.target→ 启动类型选“自动” -
方案二:任务计划程序 + 延迟启动
新建基本任务,触发器设为“登录时”,操作为“启动程序”,程序为powershell.exe,参数为-Command "wsl -d your-distro-name -u root -e systemctl start multi-user.target",勾选“延迟任务 30 秒”避免 WSL 初始化未就绪











