私が取り組んでいるソフトウェアプロジェクトの特定のタイムゾーン関連のバグを解決するために、「システムで変更を複製しようとしています」 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 

ここで何が欠けていますか?

私のセットアップはVagrantUbuntu 18 VM(Linux vagrant 4.15.0-51 / vm box “bento / ubuntu-18.04″)です。

コメント

  • VMの時刻がホストの時刻に同期されていることがよくあります'。 Vagrantに精通していないため、'解決策を示すことができません。

回答

これはあなたが見ている振る舞いを説明しませんが、タイトルの質問に答えるはずです。

システムの時間を変更する代わりに、 faketime およびTZ環境変数:

$ 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実行可能ファイルでは機能しません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です