時間を正しく偽造する方法は?

時間を正しく偽造する方法は?

私が開発しているソフトウェアプロジェクトの特定のタイムゾーンに関連するバグを解決するために、システムクロックの変更をコピーしてtimedatectlソフトウェアの動作を確認しました。

私はこれを実行して達成しようとしています。

timedatectl set-timezone America/New_York
timedatectl set-local-rtc 1
timedatectl set-ntp false
timedatectl set-time "2017-03-12 01:58:50" && hwclock -w

これを実行してtimedatectlすぐに実行すると、期待どおりに次の時間が表示されます。

Local time: Sun 2017-03-12 01:58:51 EST
Universal time: Sun 2017-03-12 06:58:51 UTC
RTC time: Sun 2017-03-12 01:58:51
Time zone: America/New_York (EST, -0500)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: yes

ただし、10秒後に分が(xx:59)に変わると、現地時間と世界時間が現在時刻に「再起動」されます。

Local time: Wed 2019-08-07 21:01:41 EDT
Universal time: Thu 2019-08-08 01:01:41 UTC
RTC time: Sun 2017-03-12 01:58:57
Time zone: America/New_York (EDT, -0400)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: yes

私がここで何を見逃しているのでしょうか?

私の設定はVagrant Ubuntu 18 VM(Linux vagrant 4.15.0-51/vm box "bento/ubuntu-18.04")です。

ベストアンサー1

これは現在見ている動作を説明していませんが、タイトルの質問に答える必要があります。

システム時間を変更する代わりに、次のツールを使用できます。faketimeTZ環境変数:

$ date; faketime -f -15d date; TZ=America/New_York faketime -f -15d date
Thu  8 Aug 10:21:13 CEST 2019
Wed 24 Jul 10:21:13 CEST 2019
Wed 24 Jul 04:21:13 EDT 2019

これにより、システムの残りの部分に影響を与えることなく、自分のタイムゾーン、日付、時刻を使用してプログラムを実行できます。

核を使用してアプリケーションにコードを挿入するため、$LD_PRELOAD静的にリンクされた実行可能ファイルまたはsetuid / setgid実行可能ファイルでは機能しません。

おすすめ記事