В настоящее время у меня есть perl-скрипт, который выполняется навсегда на моем сервере, проверяя SQS для вычисления данных. Этот скрипт работает около 6 месяцев без каких-либо проблем.
Итак, теперь я хочу перейти на CLI PHP, и там цикл сценария существует навсегда. В основном потому, что я больше знаком с PHP.
Основном,
$i="forever"; while($i==="forever"){ doSomething(); sleep(10); }
Сценарий будет выполнять shell_exec ("/ shell_script.sh"); это может занять до 2 часов. Будет ли это запускать максимальное время выполнения или подобное?
Это «нормально»? Если нет, то каковы альтернативы?
Вам нужно будет убедиться, что вы установите максимальное время выполнения сценария равным нулю, чтобы не налагался лимит времени. Вы можете сделать это из файла PHP,
set_time_limit(0);
Или вы можете установить его в файле php.ini. (См. Руководство по PHP для set_time_limit для получения дополнительной информации). Помимо этого, ваш подход должен работать нормально.
Тем не менее, нет необходимости устанавливать переменную и проверять ее, чтобы цикл навсегда,
$i="forever"; while($i==="forever")
Вы можете просто просто сделать while(true)
или while(1)
.
Лично я бы использовал Python или Perl для такой задачи. PHP действительно больше относится к доменному языку для написания веб-сайтов и сервисов.
Просто побочная заметка, поскольку другие предложили включить ограничение времени через set_time_limit
:
Из-за бесконечных возможностей использования PHP в средах оболочки максимальное время выполнения установлено на неограниченное. В то время как приложения, написанные для Интернета, часто выполняются очень быстро, приложение оболочки имеет гораздо более длительное время выполнения.
Использование PHP из командной строки >> Различия с другими SAPI
Таким образом, на самом деле запуск PHP-скриптов в командной строке не страдает от ограничения времени выполнения.
Я не очень хорошо знаком с unix, но я думаю, что люди могут использовать « cron » для выполнения обычных задач. Напишите свои задачи на языке сценариев по вашему выбору и периодически выполняйте Cron.
Если бы все, что вы хотели сделать, было бесконечным циклом, тогда
$i=1; while($i===1){ doSomething(); sleep(10); }
в$i=1; while($i===1){ doSomething(); sleep(10); }
Просто говоря, если $ i равно 1, скрипт будет продолжать движение, а $ i никогда не изменится так … Только проблема в том, что у вас может быть ограничение времени выполнения, поэтому, если вы это сделаете, используйте это или аналогичное
for($i=1; $i<100; $i++){ doSomething(); sleep(10); } header("Location: samepage.php:);
РЕДАКТИРОВАТЬ Игнорировать мой пост Использование Наличие цикла PHP-скрипта навсегда выполняет вычисления из очереди