以不同的间隔执行任务

时间:2016-05-20 17:08:09

标签: php pseudocode

我的mysql表格如下:

+----+---------------+--------------+----------------------+---------------------+
| id | report_name   | report_id    | rinterval            | last_run            |
+----+---------------+--------------+----------------------+---------------------+
|  1 | test report 1 | 434234234234 | every morning        | 2016-05-20 12:55:07 |
|  2 | test report 2 | 3434232      | every sunday morning | 2016-05-20 12:55:07 |
|  3 | test report 3 | 342423423    | never                | 2016-05-20 12:55:07 |
|  4 | test report 4 | 4324234      | every morning        | 2016-05-20 12:55:07 |
+----+---------------+--------------+----------------------+---------------------+

我正在尝试创建一个php脚本(最好)在调用时运行相应的报告。我想就最好的方法提出一些建议。

假设我设置了一个cron作业,每天早上调用脚本,间隔如上(+类似):(每天早晨,每个星期天,每月两次等)。另外,让我们假设如果过去不到24小时,脚本就不应该自动运行。此外,还可以启动手动呼叫。

我在想这样的事情:

Call script
Find what day and time it is
Find what day it is
Select * from above where day and time more than 24 hours
Iterate the above records and run the reports (report is run like http://example.com/report_name/report_id)
If rinterval reads "every morning" - run the report
If rinterval reads "every Sunday morning" - run the report if it is Sunday (and similar for other days using a case)
If rinterval reads "never" - do not run the report
if rinterval reads "twice a month" - find the last day run and see if the interval is more than 15 - if yes run it. (or similar)

在上述所有情况下,在成功运行时,请更新last_run时间戳。 我的一个问题是如果我进行手动呼叫会发生什么 - 或者如果我想在2分钟内进行2次手动呼叫以进行测试。如果我在星期一下午发表报告说,我仍然希望它能在星期二早上运行。我是否应该引入另一个列,指示这是手动呼叫还是自动呼叫?我仍然需要知道如果它是手动的,那就是运行,但是不想打破时间表,因为报告必须在早上08.00之前运行。

你有什么想法?我相信有一种更有效的方法可以做到这一点。我对所有建议持开放态度,我是从零开始做的。

1 个答案:

答案 0 :(得分:0)

  

我的一个问题是,如果我进行手动呼叫会发生什么 - 或者我想在2分钟内进行2次手动呼叫以进行测试

这取决于你的脚本在做什么。

  

我仍然需要知道

然后简单地保持调用日志(单独的表),即脚本名称,调用日期,调用方式。