Подтвердить что ты не робот

Запускайте PHP скрипт каждую секунду, используя CLI

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

Я могу найти свой script с помощью URL http://www.somesite.com/phpfile.php?key=123.

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

Update:

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

#!/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 настроен каждую минуту. Я работаю над этим некоторое время в тестовой среде, и он отлично работает. Это действительно супер быстро, и я не вижу увеличения использования ЦП и памяти.

4b9b3361

Ответ 1

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

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

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

Единственное, на что вам, вероятно, придется следить, это время работы ваших функций 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);
}

Ответ 2

Вы думали об использовании "watch"?

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

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

Ответ 3

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

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

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

Ответ 4

Это простая обновленная версия второго решения 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);
}

Ответ 5

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

Эта версия сработала (сохраните как any.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);
}
?>