如何根据 Crontab 的 Log 用代码反向推导出每一个命令的定时规则

2018-04-12 11:53:48 +08:00
 locktionc

这个问题的实际运用场景是根据 crontab 的 Log 恢复 Crontab。

现在把需求简化一下:

有一个程序,每一个小时会在 Log 里面打印hit这个单词,于是 Log 会变成这样:

2018-04-12 10:00:00 hit
2018-04-12 11:00:00 hit
2018-04-12 12:00:00 hit
2018-04-12 13:00:00 hit
2018-04-12 14:00:00 hit

如果一开始不知道这个时间规则,但是通过分析 Log 里面每一条的时间差,就可以知道程序是每小时打印一次。

现在增加了一个需求,在 12 点的时候,每 15 分钟打印一次hit。于是 Log 就变成了:

2018-04-12 10:00:00 hit
2018-04-12 11:00:00 hit
2018-04-12 12:00:00 hit
2018-04-12 12:15:00 hit
2018-04-12 12:30:00 hit
2018-04-12 12:45:00 hit
2018-04-12 13:00:00 hit
2018-04-12 14:00:00 hit

现在依然不知道这个程序的代码的情况下,如果人眼来看这个 Log,就可以反推出这个 Log 是符合两套时间规则的。一套是每小时打印一次,第二套是在 12 点的时候每 15 分钟打印一次。

现在给你一个 Log,如何用代码来反推出生成这个 Log 有这些时间规则? Log 里面最少有 1 个规则,最多有 10 个规则,而且每个规则打印的内容都不少于 3 行。

879 次点击
所在节点    问与答
2 条回复
locktionc
2018-04-12 11:58:34 +08:00
我自己想到的办法是先用代码找出很显然的规则。然后把符合这个规则的内容先删掉,然后再接着找。不知道大家有没有其他更好的办法?
bfdh
2018-04-12 12:11:35 +08:00
小明 8 点出门去上班,9 点到公司,请问小明是以什么交通方式到公司的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX