задания cron или планировщик PHP

Я использую MYSQL в качестве базы данных и PHP в качестве языка программирования. Я хотел запустить задание cron, которое будет выполняться до тех пор, пока текущая системная дата не совпадет со столбцом «крайний срок (дата)» в моей таблице базы данных под названием «ПРОЕКТ». После даты одинаковы, должен быть запущен запрос на обновление, который изменит статус (поле таблицы проекта) с «открытого» на «закрытый».

Я не совсем уверен, являются ли задания cron лучшим способом, или я мог бы использовать триггеры, или может быть что-то еще. Также я использую Apache в качестве своего веб-сервера, а моя ОС - Windows Vista.

Также, как лучше всего это сделать? Планировщик PHP или задания cron или любой другой метод? может кто-нибудь просветить меня?


person Community    schedule 12.08.2009    source источник
comment
Опасно похоже на stackoverflow .com/questions/1263237/ — хотя отличается тем, что он спрашивает, следует ли ему использовать запланированную задачу или внутренний планировщик базы данных.   -  person gnarf    schedule 12.08.2009
comment
Еще каушик - какая у тебя версия mysql сервера?   -  person gnarf    schedule 12.08.2009


Ответы (6)


Я думаю, что ваша концепция должна измениться.

PHP не может запланировать задание, как и MySQL. Триггеры в MySQL выполняются, когда возникает запрос mysql, а не в определенное время. Ни один

Это ограничение обычно не является проблемой в веб-разработке. Причина в том, что ваше PHP-приложение должно контролировать все входящие и исходящие данные. Обычно это означает только HTML, который отображает эти данные или другие форматы для пользователей или других программ.

В вашем случае вы можете думать об этом таким образом. Крайний срок – установленная дата. Вы можете рассматривать его как данные и сохранять в своей базе данных. Когда наступает крайний срок, важно не то, что отправленные вами данные в вашей базе данных просматриваются правильно.

Когда к вашему приложению поступает запрос, проверьте, не прошла ли дата крайнего срока, если это так, то отобразите, что проект закрыт, или обновите, что проект закрыт, непосредственно перед отображением.

На самом деле нет причин обновлять данные независимо от вашего PHP-приложения.

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

В вашем случае ни один из них не подходит.

PS: я не пробовал PHPscheduler, но могу предположить, что это не настоящий планировщик. Cron — это демон, который спит, пока данная задача не появится в очереди, выполняет задачу, а затем спит, пока не наступит следующая задача (по крайней мере, это то, что он делает в текущем алгоритме). PHP не может этого сделать без сокетов и расширений fork, как специальная настройка. Таким образом, PHPscheduler, скорее всего, просто проверяет, не истек ли срок действия задачи, при каждой загрузке веб-страницы (каждый раз, когда PHP выполняет страницу). Это ничем не отличается от того, что вы просто проверяете, истекла ли дата проекта, без накладных расходов PHPScheduler.

person bucabay    schedule 13.08.2009
comment
Чтобы PHPScheduler работал правильно, вам необходимо инициировать планировщик для регулярной проверки заданий, что делается путем размещения некоторого кода на активной странице. Поэтому, если вы получаете один просмотр страницы в час, вы можете запланировать выполнение задания ежечасно, а не ежеминутно. Не то решение, которое я бы рекомендовал для критически важных задач. - person DavidScherer; 08.04.2015

Я всегда брался за работу cron для всего, что связано с планированием.

Большим бонусом является то, что вы также можете вывести информацию, и она будет отправлена ​​вам по электронной почте.

Вы обнаружите, что как только вы начнете использовать cronjobs, будет трудно остановиться.

person Mark L    schedule 12.08.2009
comment
но как это делается на веб-сайте? как коммерческие веб-сайты делают это с помощью заданий cron? cron job тоже лучший способ? потому что мы можем менять хосты и, возможно, потребуется настраивать его каждый раз, когда мы меняем хосты.? - person ; 12.08.2009
comment
Вам нужно будет сделать это из учетной записи оболочки на самом хосте. Если вы подключаетесь к веб-серверу по SSH, укажите файл php, который хотите запустить, введите crontab -e, затем добавьте в команду, например, */5 * * * * /usr/bin/php /home/youraccount/website/file. php, который должен запускаться каждые пять минут или около того. Найдите в Google генераторы crontab, и они помогут вам точно настроить тайминги и сгенерировать для вас командные строки. Вам нужно будет сохранить crontab при передаче между хостами: crontab -l › myct.txt и на новом сервере, я думаю, это crontab ‹ myct.txt (или просто скопируйте и вставьте вручную) - person Mark L; 12.08.2009

cron не существует как таковой в Vista, но существует стандартный диспетчер расписания Windows, который вы можете запустить с помощью командной строки, например «php -q -f myfile.php», которая будет выполнять файл php в заданное время. .

вы также можете использовать порт программы cron, их много.

если это не критично для второго, подойдет любое приложение для планирования Windows, просто убедитесь, что для простоты в вашей переменной PATH указан путь PHP bin.

person CrazyMerlin    schedule 12.08.2009

Для заданий Windows CRON я не могу достаточно рекомендовать PyCron.

person Alix Axel    schedule 13.08.2009

как насчет PHPscheduler..R они не лучше, чем cronjobs? Я думаю, что crons будет независимым от приложения, поэтому будет сложно, если нужно сменить хост ... хотя я не совсем уверен ... Было бы здорово, если бы кто-нибудь мог это прокомментировать !! Спасибо!

person Community    schedule 12.08.2009

Хотя запланированные задачи CRON и Windows являются проверенными и надежными способами планирования заданий/задач для регулярного выполнения, существуют случаи использования, когда наличие другой запланированной задачи в CRON/Windows может стать утомительным. А именно, когда вы хотите, чтобы пользователи планировали выполнение задач, или в случаях, когда вы предпочитаете простоту/обслуживаемость/переносимость/и т. д. или все вышеперечисленное.

В тех случаях, когда я предпочитаю не использовать CRON/Windows для запланированных задач, я встраиваю в приложение систему планирования задач. Для этого по-прежнему требуется 1 задание CRON или задача Windows для планирования. Идея состоит в том, чтобы хранить сведения о задании в базе данных (имя задания, свойства задания, время последнего выполнения, интервал выполнения и все остальное, что важно для вашей реализации). Затем вы назначаете «главное» задание в CRON или Windows, которое обрабатывает все остальные ваши задания за вас. Вам потребуется, чтобы это основное задание выполнялось не реже, чем ваш самый короткий интервал; если вы хотите иметь возможность планировать задания, которые выполняются каждую минуту, главное задание должно выполняться каждую минуту.

Затем вы можете запускать каждое запланированное задание в фоновом режиме из PHP с минимальными усилиями (если хотите). В системах с ограниченным объемом памяти вы можете отслеживать использование памяти или отслеживать PID (различные методы) и ограничение до N заданий, выполняемых в данный момент времени.

Я добился большого успеха с этим методом, однако YMMV основан на ваших потребностях и вашей реализации.

person DavidScherer    schedule 08.04.2015