我只需要暂时设置日期。我运行这个
date 051918002010.00
并且只停留了 5 秒左右。然后它与时间服务器同步。我尝试过:
ps aux | grep ntp
但那里什么也没有。
我现在需要一个正确的答案,而不是稍后更详细的答案:)
编辑:回答者很快发现,我的 Ubuntu 在 VirtualBox 中运行,这与答案的某些版本有关。谢谢大家。
答案1
听起来你真的在寻找一种运行程序的方法,以便程序认为它是在不同的日期和时间下运行。
之前有人问过这个问题:Linux RunAsDate 类似物? 以下是我在那里给出的答案。请注意,您似乎正在尝试选项 3。
该ntpdate
软件包不是守护进程,应该不是自动更新您的系统时间(它应该在启动时运行一次,不再运行)。我对 VirtualBox 不太熟悉,但我猜您已经ntpd
安装了 VirtualBox Guest Additions,或者 VirtualBox Guest Additions 直接从主机操作系统同步时间,在这种情况下,您需要禁用它们,或者使用下面选项 2 中提到的包装器库之一。
更新:它看起来像是 VirtualBox Guest Additions 安装/usr/sbin/vboxadd-timesync
——我猜这是将客户机时钟与主机时钟同步的可执行文件。检查它是否安装了启动脚本(可能/etc/init.d/vboxadd-timesync
);如果是,您可以使用停止同步sudo /etc/init.d/vboxadd-timesync stop
。如果没有启动脚本,您可能只需要执行kill
该过程。
什么运行日期执行的操作如下:
RunAsDate 拦截返回当前日期和时间的内核 API 调用(GetSystemTime、GetLocalTime、GetSystemTimeAsFileTime),并用您指定的日期/时间替换当前日期/时间。
在 Linux 下,您可以使用一些选项来完成同样的事情:
找到一个包装器库来执行此操作,或者编写自己的包装器库。下面给出了一些选项。
使用虚拟机。这有点过头了,但由于客户虚拟机中的操作系统与底层主机完全分开,因此您可以将其系统时间设置为完全不同的时间。与其他选项相比,设置起来可能更快。
选项 2 可以通过不同的方法实现,具体取决于您要运行的内容。DaveParillo 的回答链接至DIY 方法解释了不同的方法并包含可执行代码。其他一些选项包括:
datefudge
,可在 Debian/Ubuntu 存储库和其他地方使用。時間虛假perl 模块,也作为包存在于 Debian 存储库中
libtime-fake-perl
。FakeTime 预加载库(又名
libfaketime
,鲜肉链接),一个可以拦截动态链接二进制文件中的系统调用的库。Debian 存储库中提供了 Squeeze 和 Sid 的版本。
答案2
由于您对 Dan McG 的评论回复似乎表明您正在将 Ubuntu 作为 VirtualBox 客户机运行,如果您安装了 VirtualBox 客户机添加程序,那么它们将自动将客户机的时间与主机的时间同步。
ps -ef | grep VBoxService
应该显示 VirtualBox 客户机添加服务正在运行。
然后你可以尝试:
sudo /etc/init.d/vboxadd-service stop
停止它直到重新启动。
答案3
快速回答:断开网络连接:)
答案4
您可以VBoxManage setextradata <guest-vm-name> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1
在主机操作系统上运行以禁用自动时间同步。