2010-03-11 3 views
2

У меня есть база данных в MySQL, у которой есть записи времени. Есть более 1000 записей времени. Я хочу извлечь время и запустить PHP-скрипт именно в это время.Запуск PHP-скрипта непрерывно

Я пытался постоянно запускать PHP-скрипт, который проверяет время, но мой сервер не позволяет запускать скрипт более 60 секунд.

EDIT. Я должен проверять базу данных каждую секунду. Есть ли альтернатива?

+0

Как о запуске вашего сценария через хрон? – jamieb

+0

Задача Cron - хорошая идея, но мне также нужно запустить запрос, чтобы проверить время из базы данных и текущее время, которое займет слишком много времени. Есть ли альтернатива для этого. – nicky

+0

Вы можете использовать set_time_limit (0); чтобы ваш php-скрипт выполнялся «навсегда», однако примерно через 1 день ваш скрипт будет использовать более 1 гб памяти. Менеджер памяти PHP очень примитивен, если вы хотите запустить один процесс в течение длительного времени, вам придется использовать java или написать очень анальный C++. – rook

ответ

3

Для выполнения сценария вам понадобится внешняя служба. В окне Unix это будет cron. В окне Windows используйте Task Scheduler.

1

Вы задумывались над написанием своего процесса в качестве сервера-демона. Он запустится и запустится во время цикла. Каждые несколько минут или, как правило, вы хотели бы проверить следующие x минут времени выполнения. Вы ставите очередь на свои запросы, и всякий раз, когда приходит время, вы начинаете сценарий, который вам нужно запустить. Я не думаю, что cron - это то, что вам нужно, поскольку вы пытаетесь планировать будущие события в произвольные моменты времени ... И я уверен, что это то, что вы сейчас используете, чтобы каждый раз проверять db.

+0

да точно. Я должен проверять db каждую секунду. есть альтернативное решение. потому что запрос снова и снова станет очень громоздким. – nicky

+0

Ну, вы просто проверяете каждые X минут каждый раз, когда ему нужно бежать в течение следующих X минут. Так что-то вроде: выберите время от времени, где время

0

Вы должны использовать функцию sleep(arg), которая приостанавливает скрипт PHP в течение заданного времени, а затем продолжается.

Например, это приостанавливает выполнение скрипта в течение 50 секунд.

+0

это решение может работать только тогда, когда параметр 'max_execution_time' установлен на очень высокое значение (я не уверен, что такое абсолютное максимальное значение ...), а также функция' set_time_limit() 'и, возможно, другие переменные. В тех случаях, когда вы хотите, чтобы сценарий запускался целую неделю или месяц, например, - это не эффективное решение, но оно может работать в очень задержанном цикле для короткого времени выполнения. –

0

Написать PHP скрипт для чтения из базы данных и добавлять записи в ваш кронтаб, чтобы сделать скрипт запуска в нужное время

0

Сохраняя ход процесса не очень хорошее решение, не в последнюю очередь потому, что вам нужно чтобы он продолжал работать. Предположительно, вы знаете, когда произойдет следующее возникновение, поэтому используйте «atd» для его расписания - при запуске сценарий должен также работать, когда и как планировать следующее задание.

Это означает, что задания привязаны к цепочке - и отказ одного разрывает цепь, а также степень детализации большинства реализаций atd может быть довольно высокой.

Возможно, вам захочется использовать более сложный инструмент планирования, например Nagios, или подход типа мониторинга процесса, например, daemontools DJB или OPMN Oracle.

C.

0

Djb в DaemonTools велик. Так что, по-видимому, это systemd и/или Upstart, хотя Remnant играет настоящий дрочи.

0

Рекомендуемый пакет Pear - system_daemon отлично смотрится. Тем не менее, автор теперь рекомендует использовать новые функциональные возможности, которые легко доступны в Ubuntu: выскочку

См his article on his own blog from 2012

Смежные вопросы