위치 시간을 계산하기 위해 잘못된 TZ를 사용하는 WSL2 Ubuntu 시간?

위치 시간을 계산하기 위해 잘못된 TZ를 사용하는 WSL2 Ubuntu 시간?

Windows 10에서 실행되는 Ubuntu 18.04 WSL2 시스템이 있는데 때때로 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

파워셸

> 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

나는 a를 시도했지만 sudo dpkg-reconfigure tzdata도움이 되지 않았습니다.

편집: 스크린샷을 추가하면 시간이 앞서 언급한 시간과 일치하지 않지만 스크린샷에는 올바른 현지 시간과 시간대가 표시됩니다.

여기에 이미지 설명을 입력하세요

답변1

Windows 10에서 실행되는 Ubuntu 18.04 WSL2 시스템이 있는데 때때로 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

그리고 그것은 나를 위해 일했습니다. 이 명령은 설명된 대로 문제를 해결했습니다.여기.

제가 사용했던 환경은 다음과 같습니다.

  • 운영 체제: 윈도우 10
  • Ubuntu 22.04.2 LTS를 실행하는 WSL

관련 정보