在 Windows 中让 WSL 实现开机后台自启

一、前言

在日常开发中,我们经常会在 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/nullsleep 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 &"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清静诗意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值