なうびるどいんぐ

脳みそ常時-3dB

dateコマンドで時刻を変更できない時はsystemd-timesyncdを止める

      HimaJyun

開発環境などで、時刻に関するテストをしたくてdate --setやtimedatectl set-timeで時刻を変更することがあると思います。

この時systemd-timesyncdが動いていると時間が元に戻ってしまうので、systemctl stop systemd-timesyncdで停止しましょう。

スポンサーリンク

現象

systemd-timesyncdが時間を正確に保ってくれるおかげでdate --settimedatectl set-timeが効きません。

# date
Thu 18 Mar 2021 06:30:08 AM JST
# date --set "2021-03-18 06:00:00"
Thu 18 Mar 2021 06:00:00 AM JST
# date
Thu 18 Mar 2021 06:30:10 AM JST
# timedatectl set-time "2021-03-18 06:00:00"
Failed to set time: Automatic time synchronization is enabled

こんな感じで、セットしても秒で戻る(そもそも効いていない?)か、変える事すらさせてくれない。

絶対に時間を変えさせないという強い意志を感じる!

解決策

冒頭ですでに述べていますが、systemd-timesyncdにしばらくおねんねしてもらう必要があります。

sudo systemctl stop systemd-timesyncd

確認

# date
Thu 18 Mar 2021 07:12:00 AM JST
# date --set "2021-03-18 07:00:00"
Thu 18 Mar 2021 07:00:00 AM JST
# date
Thu 18 Mar 2021 07:00:01 AM JST
# timedatectl set-time "2021-03-18 06:00:00"
# date
Thu 18 Mar 2021 06:00:01 AM JST

効いてますね!

用が済んだら起こしましょう。

sudo systemctl start systemd-timesyncd

確認

# date
Thu 18 Mar 2021 07:20:00 AM JST

秒で戻る。

VMの場合はホストマシンと時刻を同期する仕組みが働いていることがあるので、そちらも停止する必要がある。

 - サーバー