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 tzdata
aber 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.
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