タイトルの通りスリープから復帰すると、WSL側の時間がズレてしまいます。
↓ dateコマンドで両方を確認
PS C:\> date; wsl date
2022年10月月25日 火曜日 22:14:10
2022年 10月 25日 火曜日 17:22:37 JST
以前にもこの不具合はありましたけど、22H2が出る前には修正されていたはずなのですが…
22H2に上げると、WSLも同時にMicrosoft Store版のWSL Previewになるようで、こちらをアンインストールして以前に戻すと不具合は出ないみたいです。
(私は、wsl --update
ができないため戻していません。といいますか、アップデートするとStore版になってしまうようです)
ということで、時刻合わせにchronyをインストールして、とりあえずの対策をしたいと思います。
環境
- エディション: Windows 11 Home
- バージョン: 22H2
- WSL バージョン: 0.70.4.0
- カーネル バージョン: 5.15.68.1
- ディストリビューション: Debian GNU/Linux 11
chronyをインストール
WSL2+Debian 11での使用を前提としています。
$ sudo apt install chrony
NTPサーバーを追加
Windowsではntp.nict.jp
を指定しているので併せました。
$ sudo vi /etc/chrony/chrony.conf
-----
↓ NTPサーバーを変更
#pool 2.debian.pool.ntp.org iburst ← コメントアウト
pool ntp.nict.jp iburst ← 追加
起動
PS C:\> wsl -u root -- service chrony start
Starting time daemon: chronyd.
スリープから復帰後
PowerShellから以下のコマンドを実行します。
WSLのシェルから実行でも良いのですが、sudoの際パスワードを求められる1アクションがあるのでPowerShellを利用しています。
PS C:\> wsl -u root -- service chrony restart
↓ 表示されてリスタート
Stopping time daemon: chronyd.
Starting time daemon: chronyd.
以下の場合はリスタートできていないようなので、もう一度実行
Stopping time daemon: chronyd.
chronyd is already running.
↑ この後、dateで確認しても反映されていない
どうしてchrony?
自分の環境だけかもしれませんが、sudo hwclock -s
を実行して同期させても全く反映してくれないことが度々あったため、chronyを用いることにしました。
wsl --shutdown
でWSL自体を再起動でも良いのですが、バッチ処理でvhdのmountとserviceを幾つか起動(ssh cron apache2 mariadb php-fpm smtp4dev etc.)してまして、それなりに起動に時間が掛かるため、もっと容易に時刻を反映させたいと思い導入しました。