在 WSL 里折腾 1Panel:装环境、搬磁盘、后台保活
前阵子把 dsh 全套卸了,想重装个干净环境,顺手就想试下 1Panel。这是个开源服务器面板,官网看着顺眼,跑起来离不开 systemd 加 Docker。放真机装最稳,但我这台主力机不想直接动,于是琢磨丢进 WSL2 里玩。
WSL 有没有必要装。我的看法:本地想有个 Linux 环境跑点服务、试个面板,WSL2 是真省事,不用开虚拟机占一整块内存;但要是冲生产去,还是老老实实真机或云服务器。
装 WSL2 和 Ubuntu
管理员跑一句:
wsl --install -d Ubuntu-24.04装完重启,首次进会让你建普通用户。
装 1Panel
官方 v2 在线安装:
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"我想让它非交互跑完,提前 export 了几个变量:
export PANEL_NON_INTERACTIVE=trueexport PANEL_PORT=xxxxexport PANEL_ENTRANCE=xxxxexport PANEL_INSTALL_DOCKER=y它会顺手把 Docker Engine 也装上,装完 1pctl status 看到 Core / Agent 都是 OK 就算装好了。
两个真正的坑
Ubuntu 24.04 的镜像出厂 /etc/wsl.conf 里已经写了 systemd=true。我先前照老帖子 echo "[boot]\nsystemd=true" | sudo tee -a /etc/wsl.conf,结果启动直接报 Duplicated config key 'boot.systemd',接着 Failed to start the systemd user session。把 wsl.conf 整理成干净的一份就好:
[boot]systemd=true[user]default=yufish顺带说一句,那个 Failed to start the systemd user session 多半是 WSL 客户端抢跑的误报。我查过 journalctl -u user@1000.service,实际正常启动,loginctl 里也有 active 会话。看到这行先验证再动手,别被它带着乱改。
另一个坑是 Windows 本地代理把 apt 卡死。我 Windows 侧挂着本地代理,WSL 启动报了句 localhost 代理配置…NAT 模式不支持,然后 apt / curl 全卡住。处理是把代理环境变量 unset 掉,再把 /etc/apt/apt.conf.d/ 下带 proxy 的文件删了。
把虚拟磁盘从 C 盘搬到 G 盘
WSL 的虚拟磁盘默认落在 C 盘 AppData\Local\wsl\{guid}\ext4.vhdx,会动态膨胀。我装完 1Panel 加 Docker 直接吃了近 3 个 G,C 盘受不了,挪到 G 盘。
vhdx 不能 symlink,WSL 是按绝对路径注册的,软链过去启动找不到。正确做法是物理搬家,用 export / import(目标目录得先 mkdir 建好,这两条命令都不会自动建目录):
wsl --export Ubuntu-24.04 G:\wsl\ubuntu-24.04\ubuntu.tarwsl --unregister Ubuntu-24.04wsl --import Ubuntu-24.04 G:\wsl\ubuntu-24.04\ G:\wsl\ubuntu-24.04\ubuntu.tar --version 2import 之后默认用户会退回 root,在 wsl.conf 把 [user] default=yufish 写回去再 wsl --shutdown 重启就回来了。搬完 C 盘腾出两个多 G。
关终端就停,怎么保活
WSL 分发的生命周期跟用户会话绑一起,关了终端过会儿就 Stopped,1Panel 自然也访问不了。
我先试了 Start-Process wsl -WindowStyle Hidden,不行——它起的 wsl 是终端子进程,关终端被连带杀,顶多宽限几秒。
正解是计划任务,独立于会话。但中间又踩了 PowerShell 的参数坑:New-ScheduledTaskAction 的参数是 -Argument(单数、一个字符串),不是 -ArgumentList,写错直接报”找不到与参数名称匹配的参数”;-RunLevel 只有 Limited 和 Highest,没有 Standard,写了就枚举转换失败。
还有一点,计划任务就算设了 Hidden,AtLogOn 的交互任务照样拦不住 wsl.exe 那个控制台窗口弹出来。
最终能彻底静默的方案是套一层 VBS。建个 wsl-keepalive.vbs:
Set WshShell = CreateObject("WScript.Shell")WshShell.Run "wsl -d Ubuntu-24.04 -e bash -c ""exec sleep infinity""", 0, FalseRun 第二个参数 0 是 SW_HIDE,窗口彻底不显。计划任务改成执行 wscript.exe、参数是这个 vbs 路径、触发器 AtLogOn。这样下次登录自动拉起、后台常驻、不弹窗,关终端也不受影响。
日常怎么管
看状态 wsl -l -v,正常该是 Running;临时关用 wsl --shutdown;不想自动拉起就 Disable-ScheduledTask -TaskName WSL-KeepAlive 把计划任务禁用,别删那个 vbs,删了保活就没了。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!











