如何在 Linux 中临时设置时间

如何在 Linux 中临时设置时间

我正在使用当前时间生成的一些随机数作为种子测试一些代码

随机(时间(0))

我希望每次运行时都能获得相同的随机数。所以我想在运行程序之前临时将当前时间的值设置为某个预定义值。请不要要求我暂时删除随机数,因为这非常重要。

另外,我没有root权限,所以我无法使用命令date或其程序等效项设置日期/时间。

答案1

使用faketime

faketime '2013-03-14 08:25:30' ./your_program

如果您不是 root,您可以手动从发行版下载该程序。例如,如果您使用使用 APT 的 Debian 衍生产品:

aptitude download faketime
mkdir /tmp/faket/ dpkg-deb --extract faketime*.deb /tmp/faket
cp /tmp/faket/usr/bin/faketime ~
cp /tmp/faket/usr/lib/faketime/* ~
cd
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:."
./faketime '2013-03-14 08:25:30' ./your_program

答案2

如果没有 root 权限,您就无法在服务器上设置时间。另外,当您说“我希望每次运行时都获得相同的随机数”时,您确实将自己置于困境之中。

在运行应用程序/脚本/等时,您无法重复获取相同的随机数,因此您能做的最好的事情就是生成一个随机数,然后在每次运行应用程序进行测试时静态地使用该随机数。

答案3

如果没有 root 访问权限,您将无法执行所要求的操作;除非您可以创建虚拟机(但您需要在 VM 上拥有 root 权限)。为什么不假装呢?

time_t 时间(time_t *dummy)
{
    返回(atoi(getenv("FAKE_TIME")));
}

换句话说,选择一个要用作所有测试的种子的值,并将其分配给环境变量FAKE_TIME。 完成测试后,将代码改回原样。

显然,这只是一个例子;您可以根据需要使逻辑更复杂。(但如果您在每次程序调用时只为随机数生成器播种一次,则可能不需要这样做。)

答案4

如果使用 ntpd (使用 检查service ntpd status):

service ntpd stop
date --set="23 June 1988 22:22:55"

完成后:

ntpd -gq
service ntpd start

相关内容