在GitHub上分享了一个解决方法sudo hwclock -s
来重新同步WSL中的时钟,但是每次从睡眠/休眠中恢复都需要执行此操作。
在GitHub上分享了一个解决方法sudo hwclock -s
来重新同步WSL中的时钟,但是每次从睡眠/休眠中恢复都需要执行此操作。
您可以按照本评论中的方法手动更新WSL2内核到5.10.16:#5650 (comment)。我已经通过此方法解决了该问题。
我已将此添加到Windows任务计划程序,设置为每12小时运行:
wsl.exe -d ubuntu -u root -- ntpdate time.windows.com
安装ntpdate:
sudo apt install ntpdate
# Schedule a task to set the date inside WSL to the date found by PowerShell.
# It uses "RU" to run as SYSTEM user.
schtasks /Create /F /TN wsl-clock-sync /RU SYSTEM /SC ONEVENT /EC System `
/TR "powershell -command &{wsl -u root date -s `$(date)}" `
/MO "*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and (EventID=107 or EventID=507) or Provider[@Name='Microsoft-Windows-Kernel-General'] and (EventID=1)]]"
Pause
wsl -u root date -s $(date)
对我来说,这个问题似乎发生在系统进入睡眠模式时。所以我注册了一个bash命令,每当它失去同步时调用。我是通过添加一个function.sh
文件并在~/.bashrc
中引用它来实现的。
function.sh
:
YELLOW='\033[0;33m'
NC='\033[0m'
TIME_SERVER=ntp.ubuntu.com
# Sync wsl time
sync_date () {
echo -e "${RED}sudo ntpdate $TIME_SERVER ${NC}"
echo
sudo ntpdate $TIME_SERVER
}
~/.bashrc
:
source ~/Linux/funtions.sh
请注意,我添加了一些颜色和自定义内容(TIME_SERVER:[Windows 时间服务器是另一个选项])。
您可以使用 cli 中的 sync_date
命令同步时间。
https://github.com/matthewnourse/polite-hwclock-hctosys
...希望你会觉得它有用。
~/.bashrc
或~/.profile
文件末尾添加一些内容的方式来实现,但又觉得每次都要输入su密码很烦人,你可以创建一个定时提示,只在你需要时运行更新。在这里,我通过在Haribk's function周围放置一个包装器来实现了这一点。YELLOW='\033[0;33m'
NC='\033[0m'
TIME_SERVER=ntp.ubuntu.com
# Sync wsl time
sync_date () {
# Uncomment one of the options below.
cmd="ntpdate $TIME_SERVER"
#cmd=hwclock -sv
echo -e "${YELLOW}sudo ${cmd}${NC}"
echo
sudo $cmd
}
date
t=10
resp=
while [[ $t != 0 ]]
do
t=$(( $t - 1 ))
read -t1 -ep"($t) Sync clock with host? [yN] " -n1 resp
if [[ $? == 0 && $resp == '' || ${resp,,} == 'n' ]]
then
break
fi
if [[ ${resp,,} == 'y' ]]
then
sync_date
break
fi
done
if [[ $resp == '' ]]; then echo; fi