我们开发了一个内部应用程序,其中包含几个相关的 cron,它们会在一天中的某个时间执行。这些 cron 的设计方式确保它们会忽略在早上 7:00 之前执行的任务,或者每天或每周仅执行一次。
选择这种特殊的方法是为了确保当办公室里没有人时不会执行手头的任务(例如),但如果 cron 因某种原因执行失败,还允许每 X 分钟运行一次以“重试”(并确保在服务器停机时执行,作为额外奖励)。
此外,软件的某些部分依赖于当前系统的日期,以通知所使用的 API 执行某些操作,例如删除程序中已过期的远程对象。这些部分要么由 cron 调用,要么由某个用户调用(检查当前时间),要么由远程 API 调用。
我们现在正处于与几个最终用户一起测试此应用程序的阶段,我们希望创建一个完全可操作的环境。但是,由于应用程序中的大多数周期需要一年左右才能完成,因此我们正在寻找使服务器时间“运行得更快”的方法,即每分钟运行一天左右。但是,我们还需要每天每小时访问一次,以确保一切顺利运行。实际上,在测试期间服务器时间将增加 1440 倍。
在 Linux (CentOS) 服务器上是否有一些“好”的方法来实现这一点,或者只有让另一个 cronjob 增加时间的方法吗?这种方法有什么缺点吗?
答案1
我建议你使用假时间
伪造时间预加载库 (FTPL,又名 libfaketime) 拦截程序用于检索当前日期和时间的各种系统调用。然后它可以向这些程序报告伪造的日期和时间(由您(用户)指定)。这意味着您可以修改程序看到的系统时间,而无需更改整个系统的时间。FTPL 允许您指定绝对日期(例如 2004-01-01)和相对日期(例如 10 天前)。
然后,您可以编写测试驱动程序,以适当的虚假时间调用每个系统组件。