У меня есть Сценарий PHP, который, казалось, прекратил бежать приблизительно за 20 минутами.
Пытаться выяснить, почему, я сделал очень простой сценарий для наблюдения, сколько времени он будет работать без любого сложного кода для смущения меня.
Я нашел, что то же самое происходило с этим простым бесконечным циклом. В какой-то момент между 15 и 25 минутами выполнения, это останавливается без любого сообщения или ошибки. Браузер говорит "Сделанный".
Я был по каждой возможной вещи, о которой я мог думать:
set_time_limit ( session.gc_maxlifetime in the php.ini)
memory_limit
max_execution_time
Точка, что сценарий останавливается, не последовательна. Иногда это будет останавливаться в 15 минут, иногда 22 минуты.
Любая справка значительно ценилась бы.
Это размещается на a 1and1
сервер. Я связался с ними, и они не оказывают поддержку для ошибок, вызванных разработчиками.
Я ценю комментарии каждого. Особенно Джеймс Хартиг, вы были очень полезны и послали меня на правильном пути. Я до сих пор не знаю, какова была проблема. Я получил его, чтобы запустить на сервере с использованием SSH, просто используя команду exec (), а также ignore_user_abort (). Но это все равно было бы время. Итак, мне просто пришлось сломать его на небольшие кусочки, которые будут работать всего около 2 минут каждый, и используют переменные / массивы сеансов для хранения, где я остановился. Я рад сделать с этим довольно простым проектом сейчас, а также в высшей степени бесится в 1 и1. Ну хорошо ...
Вы считаете, что вы просто запустили скрипт из командной строки, например:
php script.php
и у сценария вымыли сообщение каждый чаще, что его все еще работает:
<?php
while (true) {
doWork();
echo "still alive...";
flush();
}
Я думаю, что вам нужно выяснить, - точное время, которое он останавливается (вы можете установить начальное время и продолжать выбросить текущее время минус инициала). Есть что-то на стороне сервера, которая останавливает файл. Кроме того, рассмотрите возможность выполнения INI_GET, чтобы проверить, чтобы убедиться, что время выполнения на самом деле 0. Если вы хотите, установите время до 30, а затем каждая петля, которую вы делаете, продолжайте настройку в 30. Каждый раз, когда вы вызываете Set_Time_limit, счетчик сбрасывает и Это может позволить вам обойти фактические пределы. Если это все еще не работает, есть что-то на 1 и 1-е годы, которые могут убить скрипт.
Также вы попробовали IGNORE_USER_ABORT?
В какой-то момент ваш браузер времена выходит и перестает загружать страницу. Если вы хотите проверить, откройте командную строку и запустите там код. Сценарий должен работать на неопределенный срок.
Я думаю, это вызвано тем, что какой-то монитор процессов убивает «зомби-процессы», чтобы предоставить ресурсы другим пользователям.
Запустите exec с помощью «2> & 1», чтобы записать что-либо, включая stderr.
В моем выводе мне удалось уловить следующее:
...
script.sh: line 4: 15932 Killed php5-cli -d max_execution_time=0 -d memory_limit=128M myscript.php
Итак что-то (внешняя сила, а не сам PHP) убивает мой процесс!
Я использую IdWebSpace , что отлично подходит, кстати, но я думаю, что большинство провайдеров виртуального хостинга навязывают этот механизм управления ресурсами / процессами, просто чтобы быть разумным.