咨询:如何阻止WSL2 Ubuntu 22.04实例在Windows 10休眠后自动关闭
我完全懂你的烦恼——之前用WSL1的时候,休眠Windows再唤醒,所有程序包括WSL实例都好好留在原地;换成WSL2并启用了实用的systemd之后,每次休眠重启,WSL2就直接关闭了,这确实挺闹心的,毕竟systemd对你来说还没法割舍。
先聊聊可能的原因:WSL2本质是跑在Hyper-V上的轻量虚拟机,和WSL1的内核翻译架构完全不同。启用systemd后,它作为系统的init进程,对系统状态的变化会更敏感。你日志里看到的rsyslog.service: Sent signal SIGHUP to main process 149 (rsyslogd),大概率是Windows休眠恢复时,系统环境变化触发了这个信号,而systemd的连锁反应最终导致了WSL2实例关闭。
给你几个可以尝试的解决方案:
修改rsyslog对SIGHUP信号的处理
既然日志里指向了rsyslog的SIGHUP信号,我们可以让它忽略这个信号。创建并编辑/etc/systemd/system/rsyslog.service.d/override.conf文件:sudo nano /etc/systemd/system/rsyslog.service.d/override.conf在文件里添加以下内容:
[Service] IgnoreSIGHUP=yes保存退出后,重新加载systemd配置并重启rsyslog:
sudo systemctl daemon-reload sudo systemctl restart rsyslog这样rsyslog收到SIGHUP时就不会触发后续的连锁操作了。
调整WSL2的虚拟机休眠策略
Windows默认会在WSL2虚拟机闲置一段时间后关闭它,我们可以通过配置让它一直运行。在Windows的用户目录下创建或编辑.wslconfig文件(路径是C:\Users\<你的用户名>\.wslconfig),添加:[wsl2] vmIdleTimeout=0这个设置会让WSL2虚拟机保持运行状态,除非你手动关闭它,这样休眠Windows后再唤醒,WSL2实例就能保留下来了。不过注意这可能会略微增加笔记本的功耗,但对大多数场景来说影响不大。
排查其他服务的触发信号
如果上面的方法没用,可以查看上一次WSL2运行的完整日志,看看有没有其他服务触发了关机:journalctl -b -1这个命令会输出上一次启动会话的日志,你可以搜索
shutdown、signal这类关键词,看看有没有其他可疑的服务行为。
备注:内容来源于stack exchange,提问作者Martin




