Intereting Posts
добавить php в jquery Настройка DomainKeys / DKIM в PHP-SMTP-клиенте PHP – файл API, возвращающий нежелательный HTML вместо ответа JSON при размещении в Интернете Групповые страницы из одной колонки Как получить переменную $ _SESSION в качестве параметра в событии onload preg заменить шаблон для трубы, за которой следует любой символ «Для запроса этого ресурса требуется токен доступа пользователя». График Facebook для уведомлений Behat 3 и Laravel, испытательная среда, не удостоенная выберите из mysql db 300 таблиц, используя префикс по умолчанию Возврат первых элементов x из массива Получение контента с использованием API википедии передать параметры php с оболочкой Получение слишком большого количества запросов у моего пользователя бота из slack Есть ли способ сохранить целостность объектов при анализе html с помощью DomDocument? htaccess блокирует доступ к каталогу, но разрешает доступ к файлам

Наличие цикла PHP-скрипта навсегда выполняющего задания на работу из очереди

В настоящее время у меня есть 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-скрипта навсегда выполняет вычисления из очереди