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