У меня есть таблица в моем 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 утра.
о чем ты думаешь? Я уверен, что есть более эффективный способ сделать это. Я открыт для всех предложений, я делаю это с нуля.
Одна из моих проблем заключается в том, что происходит, если я запускаю ручной вызов — или если я хочу выполнить 2 ручных вызова с интервалом в 2 минуты для тестирования
Это зависит от того, что делают ваши скрипты.
Мне все еще нужно знать, что
Затем просто ведите журнал вызовов (отдельная таблица) с указанием имени сценария, даты вызова, способа вызова.
Других решений пока нет …