¿La hora de WSL2 Ubuntu usa TZ incorrecto para calcular la hora de ubicación?

¿La hora de WSL2 Ubuntu usa TZ incorrecto para calcular la hora de ubicación?

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 tzdatapero 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.

ingrese la descripción de la imagen aquí

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

información relacionada