Tengo una máquina Ubuntu 18.04 WSL2 ejecutándose en Windows 10 y de vez en cuando tengo este extraño problema en el que la hora no está sincronizada en la máquina WSL2. Mi zona horaria es hora del este (-5) y, como puede ver a continuación, mi WSL está 5 horas en el futuro. Parece que, por alguna razón, mi máquina WSL interpreta mi hora local como UTC y realiza un cálculo basado en esa información.
WSL2
$ date
Fri Jan 22 03:13:28 EST 2021
$ cat /etc/timezone
America/Toronto
$ date +"%Z %z"
EST -0500
Potencia Shell
> 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
Intenté hacer un sudo dpkg-reconfigure tzdata
pero no ayudó.
EDITAR: al agregar una captura de pantalla, la hora no coincidirá con la hora que mencioné antes, pero la captura de pantalla muestra la hora local y la zona horaria correctas.
Respuesta1
Tengo una máquina Ubuntu 18.04 WSL2 ejecutándose en Windows 10 y de vez en cuando tengo este extraño problema en el que la hora no está sincronizada en la máquina WSL2. Mi zona horaria es hora del este (-5) y, como puede ver a continuación, mi WSL está 5 horas en el futuro. Parece que, por alguna razón, mi máquina WSL interpreta mi hora local como UTC y realiza un cálculo basado en esa información.
Este es un problema conocido con WSL2:la fecha del sistema no es la misma con Windows (WSL 2) #4245
Debe ejecutar el siguiente comando dentro de la instancia WSL2:
sudo hwclock -s
En su lugar, podrías ejecutar el siguiente comando de PowerShell:
wsl -u root sh -C "hwclock -S"
También debes realizar el siguiente comando de PowerShell:
wsl --shutdown
Tendrá que reiniciar la instancia WSL después de ejecutar ese comando.
La solución también requiere que Chrony se utilice con la siguiente opción comentada dentro/etc/chrony/chrony.conf
# Stop bad estimates upsetting machine clock.
# maxupdateskew 100.0
Si aún no lo estás usando:
sudo apt-get update && sudo apt-get install -y chrony && sudo chronyd
Una solución alternativa es agregar lo siguiente a .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
}
Fuente:
Otra solución alternativa es manejarlo automáticamente dentro de Windows en función de la detección de un evento específico que se registra.
Esto se puede manejar mediante el siguiente script de 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
}
Fuente:Arreglando el desfase del reloj con WSL 2
También puedes usarreloj wsl
Recursos adicionales:
Respuesta2
Acabo de emitir el siguiente comando:
sudo hwclock -s
Y funcionó para mí. Este comando solucionó el problema como se describeaquí.
El entorno que estaba usando era:
- Sistema operativo: Windows 10
- WSL con Ubuntu 22.04.2 LTS