【发布时间】:2021-03-13 03:49:33
【问题描述】:
GitHubsudo hwclock -s 上分享了一种解决方法,以重新同步 WSL 中的时钟,但每次从睡眠/休眠状态恢复时都必须这样做。
【问题讨论】:
标签: windows-subsystem-for-linux clock windows-task-scheduler wsl-2
GitHubsudo hwclock -s 上分享了一种解决方法,以重新同步 WSL 中的时钟,但每次从睡眠/休眠状态恢复时都必须这样做。
【问题讨论】:
标签: windows-subsystem-for-linux clock windows-task-scheduler wsl-2
更新:正如drkvogel 所述,Clock Sync fix 是在WSL2 kernel version 5.10.16.3 中发布的
已过时
在撰写本文时,此 GitHub Issue 已针对该错误开放。
我针对我的情况(WSL2 中的单一发行版)选择的解决方法是在 Windows 重新同步硬件时钟时使用 Windows 任务计划程序在 WSL 中运行 hwclock。
Windows:以管理员身份打开 PowerShell
schtasks /create /tn WSLClockSync /tr "wsl.exe sudo hwclock -s" /sc onevent /ec system /mo "*[System[Provider[@Name='Microsoft-Windows-Kernel-General'] and (EventID=1)]]"
Set-ScheduledTask WSLClockSync -Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries)
WSL2:运行
sudo visudo并将hwclock添加到 sudoers 以跳过密码提示
# bottom of my file looks like this
...
...
#includedir /etc/sudoers.d
<username> ALL=(ALL) NOPASSWD:/usr/sbin/hwclock, /usr/bin/apt update, /usr/bin/apt upgrade
结果
查看图片了解如何从 Windows 事件过滤中获取 Event XPath。按照提供的方式使用,让任务计划程序自动显示计划的触发器。
【讨论】:
/sbin/hwclock
重启wsl,对我来说很好用
wsl --shutdown
然后
wsl
在 PowerShell 中
【讨论】:
sudo hwclock -s 将同步到 Windows,但这是错误的。它实际上将日期同步到您的硬件时钟。重新启动 WSL(这是这个答案所建议的)会同步到 Windows,因此您可以轻松地将 Windows 和 WSL 更改为某个假日期。谢谢:)
如果有人通过搜索找到此问题并且没有注意到问题中实际上列出了解决方案,您可以通过修复 WSL 时钟漂移。
sudo hwclock -s
如果您只是偶尔需要这样做,这是一个很好的解决方案。如果您需要更频繁地执行此操作,请考虑@piouson 的解决方案
【讨论】:
hwclock: Cannot access the Hardware Clock via any known method.。
sudo hwclock -s 让你知道了,但由于某种原因没有得到确切的时间 - 我经常发现它在未来一分钟左右!
sudo ntpdate pool.ntp.org 应该会为您提供正确的时间。
但这都是因为bug in the Linux kernel 应该在某个时候包含在 Windows 更新中...
根据我的经验,the GitHub issue 中提到了许多可以解决此问题的技巧,但并非总是如此……
更新:修复现已推出!在 Windows Insiders 版本中,至少:https://devblogs.microsoft.com/commandline/servicing-the-windows-subsystem-for-linux-wsl-2-linux-kernel/
【讨论】:
您可以按照以下注释中的方法手动将 WSL2 内核更新到 5.10.16:#5650 (comment)。我已经通过这种方法解决了这个问题。
【讨论】: