скрипт php c параметром sleep (10) перестает работаеть на серевере через 30 мин

stasbz

Новичок
скрипт php c параметром sleep (10) перестает работаеть на серевере через 30 мин

Уважаемые!
есть скрипт php, который выполняет одно и тоже действие (с паузой в 10 секунд), но каждый раз с другими данными. поэтому остановливать работу php скрипта нельзя иначе заново придется его запускать. установил параметр в самом начале
ignore_user_abort();
set_time_limit (0);
запустил из браузера php скрипт, закрыл браузер. зашел в ssh. запустил команду top. скрипт проработал мин. 30, а потом исчез из списка процессов, то есть перестал работать не выполнив полностью свою работу (это было проверено).
Как сделать, чтобы скрипт продолжал работать в течении 10 часов?
 

Gremboloid

инженера Гр...
Почему нельзя разбить задачу на итерации, и запускать скрипт на выполнение каждые 10 секунд?
например по крону.
 

stasbz

Новичок
Автор оригинала: Gremboloid
Почему нельзя разбить задачу на итерации, и запускать скрипт на выполнение каждые 10 секунд?
например по крону.
возможно это хорошее решение. но я не смогу полностью переработать скрипт (нет достаточных знаний).
возможно ли на этапе выполнения команды
$i = 0;
foreach ($lines as $line_num => $line) {
$CurrentStr = htmlspecialchars($line);
$to= ltrim($CurrentStr, "\x00..\x1F");
// удалить управляющие символы ASCII из конца строки $binary
// (от 0 до 31 включительно)
....
$i += 1;
if ($i == 1) {
sleep(10);
$i=0;
}
$CurrentStr="";
}
$date_str +=1;
использовать другую команду, которая будет запоминать текущую обработанную строку в массиве данных и после, запускаясь по крону, продолжать с последнего места?
 

SiMM

Новичок
А откуда строки берутся? Если из базы - как вариант, писать в базу или файл id последней обработанной записи (либо ставить метку о том, что запись обработана) и начинать со следующей, если из файла - запоминать результат [m]ftell[/m], если файл между запусками скрипта не изменяется целиком (только дозаписывается, например).
 

Farsh

~ on ~ high ~ wave ~
stasbz
// для полной уверенности
ignore_user_abort(true);
set_time_limit(0);
error_reporting(E_ALL | E_STRICT);
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/my/log.txt');

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

stasbz

Новичок
Автор оригинала: SiMM
А откуда строки берутся? Если из базы - как вариант, писать в базу или файл id последней обработанной записи (либо ставить метку о том, что запись обработана) и начинать со следующей, если из файла - запоминать результат [m]ftell[/m], если файл между запусками скрипта не изменяется целиком (только дозаписывается, например).
данные берутся из файла. данные не меняются/не дописываются. в каждой строке данные в виде одного слова. был бы благодарен если бы сказали как воспользоваться командой ftell в моем случае.

-~{}~ 01.06.09 16:34:

Автор оригинала: Farsh
stasbz
// для полной уверенности
ignore_user_abort(true);
set_time_limit(0);
error_reporting(E_ALL | E_STRICT);
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/my/log.txt');

При завершении работы смотри в этот лог, если там пусто - в лог апача. Возможно, что на веб сервере стоят заплатки для убийства долгоработающих скриптов. Также скрипт может убиваться после каждой перезагрузки сервера.
Судя по всему , там и стоит заплатка для убивания долго работающих скриптов. в этом случае как быть?
Видимо в этом случае данные параметры использовать не получится?
Только крон?
 

Farsh

~ on ~ high ~ wave ~
Автор оригинала: stasbz
Судя по всему , там и стоит заплатка для убивания долго работающих скриптов. в этом случае как быть?
Видимо в этом случае данные параметры использовать не получится?
Только крон?
Для начала убедиться на все 100%, что проблема не в самом скрипте. Потом стоит обратиться к админу и узнать, как с этим обстоят дела на уровне сервера. Если там ничем не помогут, то да - крон.
 

weregod

unserializer
скрипт, запущенный с коммандной строки, апач не прибъёт, если не боитесь за память, то спасёт CLI
 
Сверху