Verwendet die WSL2-Ubuntu-Zeit falsche TZ zur Berechnung der Standortzeit?

Verwendet die WSL2-Ubuntu-Zeit falsche TZ zur Berechnung der Standortzeit?

Ich habe eine Ubuntu 18.04 WSL2-Maschine, die unter Windows 10 läuft, und von Zeit zu Zeit habe ich dieses seltsame Problem, dass die Zeit auf der WSL2-Maschine nicht synchron ist. Meine Zeitzone ist Eastern Time (-5) und wie Sie unten sehen können, liegt meine WSL 5 Stunden in der Zukunft. Es fühlt sich an, als ob meine WSL-Maschine aus irgendeinem Grund meine Ortszeit als UTC interpretiert und eine Berechnung auf Grundlage dieser Informationen durchführt.

WSL2

$ date 
Fri Jan 22 03:13:28 EST 2021
$ cat /etc/timezone
America/Toronto
$ date +"%Z %z"
EST -0500

Power 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

Ich habe es versucht, sudo dpkg-reconfigure tzdataaber es hat nicht geholfen.

BEARBEITEN: Beim Hinzufügen eines Screenshots stimmt die Zeit nicht mit der Zeit überein, die ich zuvor erwähnt habe, aber der Screenshot zeigt die korrekte Ortszeit und Zeitzone.

Bildbeschreibung hier eingeben

Antwort1

Ich habe eine Ubuntu 18.04 WSL2-Maschine, die unter Windows 10 läuft, und von Zeit zu Zeit habe ich dieses seltsame Problem, dass die Zeit auf der WSL2-Maschine nicht synchron ist. Meine Zeitzone ist Eastern Time (-5) und wie Sie unten sehen können, liegt meine WSL 5 Stunden in der Zukunft. Es fühlt sich an, als ob meine WSL-Maschine aus irgendeinem Grund meine Ortszeit als UTC interpretiert und eine Berechnung auf Grundlage dieser Informationen durchführt.

Dies ist ein bekanntes Problem mit WSL2:Das Systemdatum ist nicht dasselbe wie das von Windows (WSL 2) #4245

Sie müssen den folgenden Befehl innerhalb der WSL2-Instanz ausführen:

sudo hwclock -s

Sie können stattdessen den folgenden PowerShell-Befehl ausführen:

wsl -u root sh -C "hwclock -S"

Außerdem müssen Sie folgenden PowerShell-Befehl ausführen:

wsl --shutdown

Sie müssen die WSL-Instanz neu starten, nachdem Sie diesen Befehl ausgeführt haben.

Die Lösung erfordert außerdem die Verwendung von Chrony mit der folgenden auskommentierten Option/etc/chrony/chrony.conf

# Stop bad estimates upsetting machine clock.
# maxupdateskew 100.0

Falls Sie es noch nicht verwenden:

sudo apt-get update && sudo apt-get install -y chrony && sudo chronyd

Eine alternative Lösung besteht darin, Folgendes zu .bashrc hinzuzufügen:

# 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
}

Quelle:

Eine weitere alternative Lösung besteht darin, die Störung automatisch innerhalb von Windows zu beheben, indem ein bestimmtes protokolliertes Ereignis erkannt wird.

Dies kann mit dem folgenden PowerShell-Skript erledigt werden:

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
}

Quelle:Beheben von Taktabweichungen mit WSL 2

Sie können auchWSL-Uhr

Zusätzliche Ressourcen:

Antwort2

Ich habe gerade den folgenden Befehl eingegeben:

sudo hwclock -s

und bei mir hat es funktioniert. Dieser Befehl hat das Problem wie beschrieben behobenHier.

Die Umgebung, die ich verwendet habe, war:

  • Betriebssystem: Windows 10
  • WSL mit Ubuntu 22.04.2 LTS

verwandte Informationen