Intereting Posts
Как получить значение после хэша в «somepage.php # name»? Как проверить, подключен ли пользователь к facebook? Как получить дату создания файла в браузере с помощью javascript или jquery Каков наилучший способ случайной 1000 строк (не повторяющейся строки) из mysql? Как реализовать разбиение на страницы на пользовательский WP_Query Ajax Как заставить приложение php требовать проверки подлинности смарт-карт Кнопка «Назад» для одиночного веб-сайта FB.Event.Subscribe не работает для некоторых пользователей Как установить доступ по умолчанию для доступа к типу страницы в Silverstripe? Как преобразовать PDF-документ в изображение предварительного просмотра в PHP? Как я могу легко и просто планировать работу cron в PHP? хэш-файлы css и js, чтобы разбить кеш. Это медленно? Есть ли причина использовать ключевое слово «public» перед именами переменных метода и члена? PHP получить, какой файл включен / требуется текущий файл Коллекция ZF2 FileUpload

Запускать PHP-скрипт каждую секунду с использованием CLI

У меня есть выделенный сервер под управлением Cent OS с панелью Parallel PLESK. Мне нужно каждую секунду запускать PHP-скрипт для обновления моей базы данных. Это не альтернативный путь по времени, его нужно обновлять каждую секунду.

Я могу найти свой скрипт, используя URL http://www.mysite.com/phpfile.php?key=123 .

Может ли файл выполняться локально каждую секунду? Как phpfile.php ?

Обновить:

Прошло несколько месяцев с тех пор, как я добавил этот вопрос. Я закончил тем, что использовал следующий код:

 #!/user/bin/php <?php $start = microtime(true); set_time_limit(60); for ($i = 0; $i < 59; ++$i) { doMyThings(); time_sleep_until($start + $i + 1); } ?> 

Моя cronjob настроена каждую минуту. Я работаю над этим некоторое время в тестовой среде, и он отлично работает. Это действительно супер быстро, и я не вижу увеличения использования процессора и памяти.

Вы могли бы сделать это на PHP. Напишите одну программу, которая будет работать в течение 59 секунд, выполняя ваши проверки каждую секунду, а затем завершается. Объедините это с заданием cron, которое запускает этот процесс каждую минуту и ​​hey presto.

Один из подходов заключается в следующем:

 set_time_limit(60); for ($i = 0; $i < 59; ++$i) { doMyThings(); sleep(1); } 

Единственное, что вам, вероятно, придется doMyThings() время работы ваших doMyThings() . Даже если это доля секунды, то более 60 итераций, которые могут свести к минимуму некоторые проблемы. Если вы используете PHP> = 5.1 (или> = 5.3 для Windows), вы можете использовать time_sleep_until()

 $start = microtime(true); set_time_limit(60); for ($i = 0; $i < 59; ++$i) { doMyThings(); time_sleep_until($start + $i + 1); } 

Вы думали об использовании «часов»?

 watch -n 1 /path/to/phpfile.php 

Просто запустите его один раз, и он продолжит движение. Таким образом, он невосприимчив к сбою PHP (не то, что это происходит, но вы никогда не знаете). Вы даже можете добавить этот inittab, чтобы сделать его полностью пуленепробиваемым.

Это простая обновленная версия второго решения nickf позволяющая указать желаемый интервал в секундах между каждыми исполнениями во время выполнения.

 $duration = 60; // Duration of the loop in seconds $sleep = 5; // Sleep beetween each execution (with stuff execution) for ($i = 0; $i < floor($duration / $sleep); ++$i) { $start = microtime(true); // Do you stuff here time_sleep_until($start + $sleep); } 

Почему бы не запустить cron, чтобы сделать это, и в петле php-файла 60 раз, где короткий сон. Так я преодолел это, чтобы запустить php-скрипт 5 раз в минуту.

Чтобы настроить файл для запуска в качестве сценария, добавьте путь к вашему PHP в первой строке, такой как скрипт perl

 #!/user/bin/php <?php while($i < 60) { sleep(1); //do stuff $i++; } ?> 

Я заметил, что ОП отредактировал ответ, чтобы дать свое решение. Это решение не работало в моей коробке (путь к PHP неверен, а синтаксис PHP неверен)

Эта версия сработала (сохраните как whatever.sh и chmod + X whatever.sh, чтобы она могла выполняться)

 #!/usr/bin/php <?php $start = microtime(true); set_time_limit(60); for ($i = 0; $i < 59; ++$i) { echo $i; time_sleep_until($start + $i + 1); } ?>