暂未播放
0:00
0:00

在 WSL 里折腾 1Panel:装环境、搬磁盘、后台保活

927 字
5 分钟
在 WSL 里折腾 1Panel:装环境、搬磁盘、后台保活

前阵子把 dsh 全套卸了,想重装个干净环境,顺手就想试下 1Panel。这是个开源服务器面板,官网看着顺眼,跑起来离不开 systemd 加 Docker。放真机装最稳,但我这台主力机不想直接动,于是琢磨丢进 WSL2 里玩。

WSL 有没有必要装。我的看法:本地想有个 Linux 环境跑点服务、试个面板,WSL2 是真省事,不用开虚拟机占一整块内存;但要是冲生产去,还是老老实实真机或云服务器。

装 WSL2 和 Ubuntu#

管理员跑一句:

Terminal window
wsl --install -d Ubuntu-24.04

装完重启,首次进会让你建普通用户。

装 1Panel#

官方 v2 在线安装:

Terminal window
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

我想让它非交互跑完,提前 export 了几个变量:

Terminal window
export PANEL_NON_INTERACTIVE=true
export PANEL_PORT=xxxx
export PANEL_ENTRANCE=xxxx
export 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 建好,这两条命令都不会自动建目录):

Terminal window
wsl --export Ubuntu-24.04 G:\wsl\ubuntu-24.04\ubuntu.tar
wsl --unregister Ubuntu-24.04
wsl --import Ubuntu-24.04 G:\wsl\ubuntu-24.04\ G:\wsl\ubuntu-24.04\ubuntu.tar --version 2

import 之后默认用户会退回 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, False

Run 第二个参数 0 是 SW_HIDE,窗口彻底不显。计划任务改成执行 wscript.exe、参数是这个 vbs 路径、触发器 AtLogOn。这样下次登录自动拉起、后台常驻、不弹窗,关终端也不受影响。

日常怎么管#

看状态 wsl -l -v,正常该是 Running;临时关用 wsl --shutdown;不想自动拉起就 Disable-ScheduledTask -TaskName WSL-KeepAlive 把计划任务禁用,别删那个 vbs,删了保活就没了。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
在 WSL 里折腾 1Panel:装环境、搬磁盘、后台保活
https://x1anyu.cn/posts/19/
作者
羡鱼
发布于
2026-10-09
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
给博客写了个缓存预热脚本
项目实践博客部署在 EdgeOne 免费版上,没有预热 API。手里有台服务器能公网出访,就写了个脚本模拟真实访问把边缘缓存填一遍,顺带做了并发、重试、缓存命中统计和二次验证。
2
博客内容分离到私有仓库,构建时自动同步
项目实践主题仓库要开源,文章不想公开,于是把 src/content 搬进私有仓库、构建前自动拉回。同步脚本踩了浅克隆和 || true 吞失败的坑;内容仓库推送不触发 EdgeOne 重建,得自己补部署钩子。
3
把 Aemeath 的站点统计页搬进我的博客
项目实践想要个自己的数据统计页,就把 Aemeath 那套整页搬了过来。数据走 Umami 公开分享不用后端,但地图要换成合规的,推送节奏的口径也得按自己仓库重算,原作者写死的参数照抄会出错。
4
Fork Friend-Circle-Lite 后我做了什么
项目实践我博客一直想要一个友链聚合页——把朋友们最近的 RSS 文章、友链可达性、主页截图汇到一页里。之前用的 checkflink 已经不再能满足我的使用要求,所以我又在原作者新项目的基础上进行了二开...
5
评论区表情面板被裁、切换还抖,原因在 overflow
主题维护Firefly 接了 Waline 评论,回复时点开表情面板,下半截和分类 tab 被主题的圆角卡片裁掉,切分类还会左右抖。这篇讲清楚根因和修法,从 DOM 排查到 overflow 的非法组合,对应上游
随机文章随机推荐

评论区

Profile Image of the Author
羡鱼
临渊空慕水中鱼, 不如携风自渡河.
分类
标签
最新动态
站点统计
文章
20
分类
7
标签
49
总字数
26,919
运行时长
0 天
最后活动
0 天前
文章目录