一、前言
在日常开发中,我们经常会在 WSL(Windows Subsystem for Linux) 中运行一些长期服务,例如:
-
Django / Flask 后端服务
-
Redis、MySQL、Nginx
-
FRP、SSH、定时任务等
但是默认情况下,WSL 在 关闭终端窗口 或 重启系统 后就会自动停止。
如果希望它能像系统服务一样在后台自动启动,我们可以通过 Windows 任务计划程序(Task Scheduler) 实现这一目标。
二、实现思路
WSL 本质上是通过 wsl.exe 启动的子系统。
我们可以让 Windows 在系统启动时,执行以下命令:
wsl -d Ubuntu -u root -- bash -c "nohup tail -f /dev/null >/dev/null 2>&1 &"
解释如下:
| 参数 | 含义 |
|---|---|
-d Ubuntu | 指定启动的发行版名称(可改为你自己的,比如 Debian、openSUSE 等) |
-u root | 以 root 用户运行 |
bash -c "..." | 运行指定命令 |
nohup tail -f /dev/null | 让 WSL 保持运行,不会自动退出 |
这样一来,只要 Windows 启动,WSL 就会随之进入后台常驻。
三、配置步骤(任务计划程序方式)
1. 打开任务计划程序
-
快捷键
Win + R -
输入
taskschd.msc→ 回车
2. 创建新任务
右侧点击 “创建任务”(不是“创建基本任务”)。
在“常规”选项卡中:
-
名称:
WSL_Ubuntu_AutoStart -
勾选:
-
✅ “使用最高权限运行”
-
✅ “无论用户是否登录都运行”
-
-
“配置为”:选择 “Windows 10” 或 “Windows 11”
💡 说明:这样能保证系统启动时以管理员权限执行命令,而不依赖用户登录。
3. 设置触发器
-
切换到【触发器】选项卡 → 点击【新建】
-
选择 “系统启动时”
-
其他保持默认 → 点击【确定】
这样任务会在系统启动后立即触发执行。
4. 设置操作
-
切换到【操作】选项卡 → 点击【新建**
-
在“程序或脚本”中填入:
C:\Windows\System32\wsl.exe -
在“添加参数”中填入:
-d Ubuntu -u root -- bash -c "nohup tail -f /dev/null >/dev/null 2>&1 &"
📌 注意:
Ubuntu改成你自己的 WSL 发行版名称,可通过wsl -l查看。命令中的
nohup tail -f /dev/null是一种“保活”机制,不会消耗 CPU。
5. 设置条件和安全项
-
【条件】页签中取消勾选:
-
❌ “仅在计算机使用交流电时启动任务”
-
❌ “仅在计算机空闲时运行任务”
-
-
【设置】页签中勾选:
-
✅ “允许按需运行任务”
-
✅ “任务失败时重新启动”
-
6. 保存任务
点击【确定】 → 如果系统提示输入管理员密码,请输入并确认。
至此,一个自动后台启动的任务就配置完成。
四、验证 WSL 是否开机自启成功
重启电脑后,打开 PowerShell 或 CMD,输入:
wsl -l -v
如果输出类似:
NAME STATE VERSION * Ubuntu Running 2
说明 WSL 已经在后台运行。
此时即使没有打开任何终端窗口,WSL 也保持常驻。
五、进阶用法:启动时自动运行自定义服务
如果希望 WSL 启动后自动运行你的服务(如 Django、Nginx、FRP 等),可以修改启动命令,例如:
wsl -d Ubuntu -u root -- bash -c "cd /root/myproject && nohup python manage.py runserver 0.0.0.0:8000 &"
或者:
wsl -d Ubuntu -u root -- bash -c "service nginx start && service redis-server start && tail -f /dev/null"
六、常见问题与解决方案
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 任务未执行 | 未勾选“无论用户是否登录都运行” | 在“常规”中勾选 |
| 执行权限不足 | 未选“使用最高权限运行” | 勾选“使用最高权限运行” |
| 子系统未启动 | 发行版名称不匹配 | 执行 wsl -l 检查发行版名称 |
| 启动后马上退出 | 没有保活命令 | 使用 tail -f /dev/null 或 sleep infinity |
七、其它方案简述(可选)
| 方案 | 简介 | 适合场景 |
|---|---|---|
| NSSM 服务方案 | 使用 nssm.cc 创建 Windows 服务 | 专业部署、生产环境 |
| 启动文件夹脚本 | 把 .bat 文件放入 shell:startup | 临时测试、轻量使用 |
| 注册表 Run 项 | 在 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 注册启动项 | 仅用户登录时启动 |
八、总结
| 方法 | 特点 | 推荐指数 |
|---|---|---|
| 任务计划程序 | 稳定、无第三方依赖、后台运行 | ⭐⭐⭐⭐⭐ |
| NSSM 服务 | 可控性强,适合部署 | ⭐⭐⭐⭐ |
| 启动文件夹脚本 | 简单但需登录后生效 | ⭐⭐ |
✅ 推荐做法:使用「任务计划程序 + nohup 命令」方案,兼顾稳定性与简洁性,能满足大多数 WSL 服务自启需求。
九、参考命令汇总
# 查看当前发行版状态
wsl -l -v
# 设置默认发行版
wsl --set-default Ubuntu
# 关闭所有 WSL 实例
wsl --shutdown
# 启动 WSL 并常驻后台
wsl -d Ubuntu -u root -- bash -c "nohup tail -f /dev/null >/dev/null 2>&1 &"
2915

被折叠的 条评论
为什么被折叠?



