Выполнение заданий в разные промежутки времени

У меня есть таблица в моем 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

Решение

Одна из моих проблем заключается в том, что происходит, если я запускаю ручной вызов — или если я хочу выполнить 2 ручных вызова с интервалом в 2 минуты для тестирования

Это зависит от того, что делают ваши скрипты.

Мне все еще нужно знать, что

Затем просто ведите журнал вызовов (отдельная таблица) с указанием имени сценария, даты вызова, способа вызова.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]