Я использую MYSQL в качестве моей базы данных и PHP в качестве языка программирования. Мне нужно запустить задание cron, которое будет выполняться до тех пор, пока текущая системная дата не будет соответствовать столбцу «крайний срок (дата)» в моей таблице базы данных «PROJECT». такие же, как и запрос на обновление, который изменит статус (поле таблицы проектов) с «open» на «close».
Я не уверен, что задание cron – лучший способ, или я могу использовать триггеры или может быть чем-то другим. Также я использую Apache в качестве своего веб-сервера, а моя ОС – Windows Vista.
И что это лучший способ сделать это? Планировщик PHP или задания cron или любой другой метод? может кто-нибудь просветить меня?
Я думаю, что ваша концепция должна измениться.
PHP не может планировать работу, и MySQL не может. Триггеры в MySQL выполняются при возникновении запроса mysql, а не в определенное время. ни
Это ограничение обычно не является проблемой в веб-разработке. Причина в том, что ваше приложение PHP должно контролировать все данные, поступающие и выходящие. Обычно это означает только HTML, который отображает эти данные или другие форматы для пользователей или других программ.
В вашем случае вы можете думать об этом таким образом. Крайний срок – установленная дата. Вы можете рассматривать его как данные и сохранять его в своей базе данных. Когда крайний срок не имеет значения, это то, что данные, которые вы отправили в своей базе данных, просматриваются правильно.
Когда запрос поступает в ваше приложение, проверьте, не указана ли дата в прошлом, если это так, затем покажите, что проект закрыт, или обновите, что проект закрыт непосредственно перед отображением.
На самом деле нет причин для обновления данных независимо от вашего PHP-приложения.
Обычно единственное, что вы хотите запланировать, – это задания, которые повлияют на ваше приложение с точки зрения нагрузки, или это нужно делать только один раз, или когда параллелизм или время являются проблемой.
В вашем случае ни одно из них не применяется.
PS: Я не пробовал PHPscheduler, но могу догадаться, что это не настоящий планировщик. Cron – это деамон, который спит до тех пор, пока заданная задача не появится в очереди, выполняет задачу, а затем спит до следующего (по крайней мере, то, что она делает в текущем алгоритме). PHP не может сделать это без сокетов и расширений fork, как специальная настройка. Таким образом, PHPscheduler, скорее всего, просто проверяет, истек ли срок для задачи, при каждом загрузке веб-страницы (всякий раз, когда PHP выполняет страницу). Это ничем не отличается от того, что вы просто проверяете, истек ли срок в проекте, без накладных расходов PHPScheduler.
Я всегда буду искать работу cron для любого связанного графика.
Большой бонусный момент заключается в том, что вы можете также эхо-информацию и получить письмо по электронной почте.
Вы увидите, как только вы начнете использовать cronjobs, его трудно остановить.
cron не существует, по сути, в Vista, но существует стандартный диспетчер планирования Windows, который вы можете запускать с командной строкой, такой как «php -q -f myfile.php», которая будет выполнять php-файл в заданное время ,
вы также можете использовать порт программы cron, там много.
если это не критично для второго, любое приложение планирования Windows будет делать, просто убедитесь, что у вас есть путь к bin в вашем PATH-переменной для простоты.
Для заданий Windows CRON я не могу рекомендовать PyCron достаточно.
как насчет PHPscheduler..R они не лучше, чем cronjobs? Я думаю, что коронки были бы независимы от приложения, поэтому было бы сложно, если бы кто-то изменил хост. Я не уверен, хотя. Было бы здорово, если бы кто-нибудь мог прокомментировать это! Благодаря!
Хотя задачи CRON и Windows Scheduled Tasks – это проверенные и правильные способы планирования заданий / задач, которые будут выполняться на регулярной основе, есть случаи, когда выполнение заданий с расписанием в CRON / Windows может стать утомительным. А именно, если вы хотите, чтобы пользователи планировали выполнение каких-либо действий или в тех случаях, когда вы предпочитаете простоту / ремонтопригодность / переносимость / etc или все вышеперечисленное.
В случаях, когда я предпочитаю не использовать CRON / Windows для запланированных задач, я встраиваю в приложение систему планирования задач. Это все еще требует задания CRON или задачи Windows. Идея состоит в том, чтобы сохранить детали задания в базе данных (имя задания, свойства задания, время последнего запуска, интервал выполнения, что-то еще важное для вашей реализации). Затем вы планируете работу «Мастер» в CRON или Windows, которая обрабатывает все ваши другие задания для вас. Вам понадобится эта основная работа, чтобы работать как минимум в кратчайшие сроки; если вы хотите иметь возможность планировать задания, которые запускаются каждую минуту, основная работа должна запускаться каждую минуту.
Затем вы можете запустить каждое запланированное задание в фоновом режиме с PHP с минимальными усилиями (если хотите). В системах с ограничением памяти вы можете контролировать использование памяти или отслеживать PID (различные методы) и ограничивать N
заданий, выполняемых в данный момент времени.
У меня был большой успех в этом методе, однако YMMV основывался на ваших потребностях и вашей реализации.