Наличие цикла сценариев PHP, выполняющего вычислительные задания из системы очередей - PullRequest
4 голосов
/ 04 июня 2010

В настоящее время у меня есть Perl-скрипт, который всегда работает на моем сервере, проверяя SQS для данных для вычисления. Этот скрипт работает уже около 6 месяцев без каких-либо проблем.

Итак, теперь я хочу переключиться на CLI PHP и сделать так, чтобы цикл сценариев существовал вечно. В основном потому, что я больше знаком с PHP.

Основном,

$i="forever";
while($i==="forever"){
    doSomething();
    sleep(10);
}

Скрипт будет выполнять shell_exec ("/ shell_script.sh"); на это может уйти до 2 часов. Будет ли это запускать максимальное время выполнения или подобное?

Это нормально? Если нет, каковы альтернативы?

Ответы [ 5 ]

6 голосов
/ 04 июня 2010

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

set_time_limit(0);

Или вы можете установить его в своем файле php.ini. (См. Руководство по PHP для set_time_limit для получения дополнительной информации). Кроме этого, ваш подход должен работать нормально.

Тем не менее, нет необходимости устанавливать переменную и проверять ее, чтобы зациклить навсегда,

$i="forever";
while($i==="forever")

Вы можете просто сделать while(true) или while(1).

5 голосов
/ 04 июня 2010

Лично я бы использовал Python или Perl для такой задачи, как эта. PHP на самом деле является предметным языком для написания веб-сайтов и сервисов.

3 голосов
/ 04 июня 2010

Просто примечание, как другие предложили изменить ограничение по времени через set_time_limit:

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

Использование PHP из командной строки >> Отличия от других SAPI

Таким образом, выполнение PHP-скриптов в командной строке не ограничено по времени выполнения.

1 голос
/ 04 июня 2010

Я не очень знаком с Unix, но я думаю, что люди могут использовать " cron " для выполнения рутинных задач. Напишите свои задачи на выбранном вами языке сценариев и периодически выполняйте их с помощью Cron.

0 голосов
/ 04 июня 2010

Если все, что вы хотели сделать, это иметь бесконечный цикл, тогда

$i=1;
while($i===1){
    doSomething();
    sleep(10);
} 

Проще говоря, пока $ i равно 1, скрипт будет продолжать работать, а $ i никогда не изменится, так что ... Единственная проблема заключается в том, что у вас может быть ограничение по времени выполнения, поэтому, если вы это сделаете, используйте это или подобное

for($i=1; $i<100; $i++){
    doSomething();
    sleep(10);
} 
header("Location: samepage.php:);

EDIT Игнорировать мой пост Используйте Наличие цикла сценариев PHP для выполнения вычислительных заданий из системы очередей

...