我需要测试仅在一天中特定时间发生的软件方面。我不想等一整天(凌晨 2:00 到达这里),而是想更改时间。
但我宁愿不改变它永久。
我知道我可以使用 更改时间date
,然后再改回来,但是有更好的方法吗?
有问题的操作系统是在虚拟机中运行的 RHEL6。
答案1
有一个图书馆叫libfaketime
(还在 GitHub 上),它允许您让系统向您的应用程序报告给定时间。您可以让系统报告程序执行期间的固定时间,也可以在某个特定时间(例如 01:59:30)启动时钟。基本上,您通过库加载器将 faketime 库挂接到程序的内存映像中,并且它以自己的方式捕获和处理与系统时间相关的所有系统调用。不完全是这样改变系统时间,但它改变了时间报道到您的特定应用程序而不影响正在运行的任何其他内容,这可能是您真正想要的(否则,我认为没有理由不只是更改全局系统时间)。
关于如何使用它有很多可能的变体,但看起来像使用 libfaketime 更改进程认为的时间有一个非常全面的列表以及示例代码来尝试它们。如果您知道要搜索什么,谷歌还应该能够挖掘一些示例。
它似乎无法通过 RHEL 存储库预先打包,但例如Debian 以软件包名称提供它faketime
。它也看起来可以直接从源代码构建(它显然甚至不需要步骤configure
或类似的东西)。
答案2
我首先要做的是安装ntp
服务与远程服务器同步时间。然后,停止服务,手动更改日期,尝试并重新启动服务:
service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start