dateコマンドで時刻を変更できない時はsystemd-timesyncdを止める
開発環境などで、時刻に関するテストをしたくてdate --setやtimedatectl set-timeで時刻を変更することがあると思います。
この時systemd-timesyncdが動いていると時間が元に戻ってしまうので、systemctl stop systemd-timesyncdで停止しましょう。
スポンサーリンク
現象
systemd-timesyncd
が時間を正確に保ってくれるおかげでdate --set
やtimedatectl 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の場合はホストマシンと時刻を同期する仕組みが働いていることがあるので、そちらも停止する必要がある。