我试图在 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/设备/VMMDev/0/Config/GetHostTimeDisabled”1
这不会禁用同步服务线程本身。它使该线程调用的管理程序调用返回失败。同步服务线程继续运行。只是反复获取主机时间失败。
进一步阅读
- 迈克尔·比布尔 (2016-01-24)。
systemd-timesyncd
在 VirtualBox 来宾中禁用。 Debian 错误 #812522。 - ”微调计时器和时间同步”。Oracle VM VirtualBox 用户手册。甲骨文。 2019.
答案2
这似乎是由虚拟机与主机系统同步的服务引起的。就我而言(Virtualbox)禁用该服务解决了问题。
systemctl stop vboxadd-service.service
其他答案/评论中指定了更复杂的解决方案,但它们需要在主机端执行一个步骤。对于我的情况,考虑到与此模拟相关的所有测试都需要在来宾上执行,记录起来更简单。