毎月繰り返されるジョブの実行をテストするために、Ubuntu 18.04(systemd 237)で偽の時間を設定しようとしています。
仮想マシン(ゲストアドインを持つVirtualbox)で実行されます。
ntp同期が無効になっていても、時間は数秒後に正しい時間にリセットされます。
はい。
# Disable the sync
timedatectl set-ntp 0
# There aren't any ntp daemons running
systemctl -a | grep ntp # Returns nothing
# This confirms there is no sync active
timedatectl status
# Local time: Mo 2019-03-11 15:22:13 CET
# Universal time: Mo 2019-03-11 14:22:13 UTC
# RTC time: Mo 2019-03-11 14:22:13
# Time zone: Europe/Berlin (CET, +0100)
# System clock synchronized: no
# systemd-timesyncd.service active: no
# RTC in local TZ: no
# Setting up the fake time
timedatectl set-time '2015-11-20 16:14:50'
# It worked! Wuhuu!
timedatectl status
# Local time: Fr 2015-11-20 16:14:51 CET
# Universal time: Fr 2015-11-20 15:14:51 UTC
# RTC time: Fr 2015-11-20 15:14:51
# Time zone: Europe/Berlin (CET, +0100)
# System clock synchronized: no
# systemd-timesyncd.service active: no
# RTC in local TZ: no
# 5 sec later
timedatectl status
# Local time: Mo 2019-03-11 15:25:35 CET
# Universal time: Mo 2019-03-11 14:25:35 UTC
# RTC time: Fr 2015-11-20 15:14:51
# Time zone: Europe/Berlin (CET, +0100)
# System clock synchronized: no
# systemd-timesyncd.service active: no
# RTC in local TZ: no
同期サービスがない場合、どのように同期を維持しますか?
答え1
同期サービスがない場合は[… ]
しかし、あります。ゲストオペレーティングシステムで実行されるVirtualBoxサービスに組み込まれています。
残念ながら、ゲストオペレーティングシステムのサービスはVBoxService
一度に多くのタスクを実行し、サービスを停止すると実行したすべてのタスクが完全にキャンセルされます。基本的なサービス管理ツールによる制御がないため、利用可能な唯一の詳細な制御はOracleのツールです。
VBoxManageは追加データを設定します。仮想マシン名""VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1
同期サービススレッド自体は無効になりません。これにより、このスレッドによって呼び出されたスーパーバイザ呼び出しは失敗を返します。同期サービススレッドは引き続き実行されます。ホスト時間の繰り返し取得に失敗します。
追加読書
- マイケル聖書(2016-01-24)。
systemd-timesyncd
VirtualBoxゲストで無効。 Debianのバグ#812522。 - 」タイマーの微調整と時間同期」。Oracle VM VirtualBoxユーザーズマニュアル。信託。 2019.
答え2
これは、仮想マシンをホストシステムと同期させるサービスが原因であるようです。私の場合(Virtualbox)サービスを無効にすると問題が解決しました。
systemctl stop vboxadd-service.service
より複雑なソリューションは他の回答/説明で指定されていますが、ホスト側で手順が必要です。私の場合、このシミュレーションに関連するすべてのテストをゲストで実行する必要があることを考慮すると、記録する方が簡単でした。