У меня есть машина Ubuntu 18.04 WSL2, работающая в Windows 10, и время от времени я сталкиваюсь с этой странной проблемой, когда время на машине WSL2 рассинхронизируется. Мой часовой пояс — восточное время (-5), и, как вы можете видеть ниже, мой WSL отстает на 5 часов. Такое ощущение, что по какой-то причине моя машина WSL интерпретирует мое местное время как UTC и делает расчет на основе этой информации.
WSL2
$ date
Fri Jan 22 03:13:28 EST 2021
$ cat /etc/timezone
America/Toronto
$ date +"%Z %z"
EST -0500
PowerShell
> date
Thursday, January 21, 2021 10:13:31 PM
> Get-TimeZone
Id : Eastern Standard Time
DisplayName : (UTC-05:00) Est (É.-U. et Canada)
StandardName : Est
DaylightName : Est (heure d’été)
BaseUtcOffset : -05:00:00
SupportsDaylightSavingTime : True
Я попробовал сделать, sudo dpkg-reconfigure tzdata
но это не помогло.
EDIT: добавляю скриншот, время не будет соответствовать тому, которое я упомянул ранее, но скриншот показывает правильное местное время и часовой пояс.
решение1
У меня есть машина Ubuntu 18.04 WSL2, работающая в Windows 10, и время от времени я сталкиваюсь с этой странной проблемой, когда время на машине WSL2 рассинхронизируется. Мой часовой пояс — восточное время (-5), и, как вы можете видеть ниже, мой WSL отстает на 5 часов. Такое ощущение, что по какой-то причине моя машина WSL интерпретирует мое местное время как UTC и делает расчет на основе этой информации.
Это известная проблема с WSL2:системная дата не совпадает с Windows (WSL 2) #4245
Вам необходимо выполнить следующую команду в экземпляре WSL2:
sudo hwclock -s
Вместо этого вы можете выполнить следующую команду PowerShell:
wsl -u root sh -C "hwclock -S"
Вам также необходимо выполнить следующую команду PowerShell:
wsl --shutdown
После выполнения этой команды вам придется перезапустить экземпляр WSL.
Для решения также требуется использовать Chrony со следующей закомментированной опцией/etc/chrony/chrony.conf
# Stop bad estimates upsetting machine clock.
# maxupdateskew 100.0
Если вы еще им не пользуетесь:
sudo apt-get update && sudo apt-get install -y chrony && sudo chronyd
Альтернативным решением является добавление следующего в .bashrc:
# WSL2 clock skew hack
__customprompt() {
NOW=$(date +%s)
if (( NOW > WSL_NEXT_CLOCKSYNC )); then
echo "$(date -Iseconds) - hwclock [$WSL_NEXT_CLOCKSYNC : $NOW]" >> ~/.wsltimesync
nohup wsl.exe -u root -c 'hwclock -s' &>/dev/null &
export WSL_NEXT_CLOCKSYNC=$(date --date='+5 minutes' +%s)
fi
}
Источник:
Другим альтернативным решением является автоматическая обработка в Windows на основе обнаружения определенного события, которое регистрируется.
Это можно сделать с помощью следующего скрипта PowerShell:
function Log($message) {
$output = (Get-Date).ToUniversalTime().ToString("u") + "`t$message"
Add-Content -Path "~/.wsl-clock.log" -Value $output
}
Log "********************************"
Log "*** Update WSL clock starting..."
$runningDistroCount = wsl --list --running --quiet |
Where-Object {$_ -ne ""} |
Measure-Object |
Select-Object -ExpandProperty Count
if ($runningDistroCount -eq 0){
Log "No Distros - quitting"
exit 0
}
$originalDate=wsl sh -c "date -Iseconds"
Log "Performing reset..."
$result = wsl -u root sh -c "hwclock -s" 2>&1
$success = $?
if (-not $success){
Log "reset failed:"
Log $result
exit 2
} else {
$newDate=wsl bash -c "date -Iseconds"
Log "clock reset"
Log "OriginalDate:$originalDate"
Log "NewDate: $newDate"
exit 0
}
Источник:Исправление перекоса часов с помощью WSL 2
Вы также можете использоватьwsl-часы
Дополнительные ресурсы:
решение2
Я только что выполнил следующую команду:
sudo hwclock -s
и это сработало для меня. Эта команда исправила проблему, как описаноздесь.
Среда, которую я использовал, была следующей:
- Операционная система: Windows 10
- WSL работает под управлением Ubuntu 22.04.2 LTS