测试应用程序的时间

测试应用程序的时间

我们开发了一个内部应用程序,其中包含几个相关的 cron,它们会在一天中的某个时间执行。这些 cron 的设计方式确保它们会忽略在早上 7:00 之前执行的任务,或者每天或每周仅执行一次。

选择这种特殊的方法是为了确保当办公室里没有人时不会执行手头的任务(例如),但如果 cron 因某种原因执行失败,还允许每 X 分钟运行一次以“重试”(并确保在服务器停机时执行,作为额外奖励)。

此外,软件的某些部分依赖于当前系统的日期,以通知所使用的 API 执行某些操作,例如删除程序中已过期的远程对象。这些部分要么由 cron 调用,要么由某个用户调用(检查当前时间),要么由远程 API 调用。

我们现在正处于与几个最终用户一起测试此应用程序的阶段,我们希望创建一个完全可操作的环境。但是,由于应用程序中的大多数周期需要一年左右才能完成,因此我们正在寻找使服务器时间“运行得更快”的方法,即每分钟运行一天左右。但是,我们还需要每天每小时访问一次,以确保一切顺利运行。实际上,在测试期间服务器时间将增加 1440 倍。

在 Linux (CentOS) 服务器上是否有一些“好”的方法来实现这一点,或者只有让另一个 cronjob 增加时间的方法吗?这种方法有什么缺点吗?

答案1

我建议你使用假时间

伪造时间预加载库 (FTPL,又名 libfaketime) 拦截程序用于检索当前日期和时间的各种系统调用。然后它可以向这些程序报告伪造的日期和时间(由您(用户)指定)。这意味着您可以修改程序看到的系统时间,而无需更改整个系统的时间。FTPL 允许您指定绝对日期(例如 2004-01-01)和相对日期(例如 10 天前)。

然后,您可以编写测试驱动程序,以适当的虚假时间调用每个系统组件。

答案2

两个类似的问题已经得到回答这里这里

加速系统时钟的最佳方式是使用系统调用 adjtime 或 adjtimex,但它们会非常缓慢地调整时钟以免干扰依赖于精确时间间隔的进程。

cronjob 解决方案将导致定期时间跳跃,这肯定会干扰服务器上正在运行的某些程序(例如,如果时钟跳过了应该启动作业的时间,则 cron 可能无法启动作业)

相关内容