|
|
|
| Скрипт построчно берет инфрмацию из таблицы базы, обрабатывает ее и записывает в другую таблицу, а обработанную строку из исходной таблицы удаляет. Поскольку время такой обработки получилось слишком большим, я решил проводить её порциями по 500 строк при каждом вызове скрипта. А для того, что бы обработать все, что накопилось в исходной таблице, скрипт автоматически перезагружается до тех пор, пока в исходной таблице есть больше десяти строк. Организовано это так:
if ($n_bot > 10)
{
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=db-bot-arh.php'></HEAD></HTML>";
exit;
}
|
Скрипт работает нормально при его вызове из броузера, осуществляяя десятки перезапусков, если надо. А вот при запуске по Cron я наблюдаю только однократное исполнение (хотя иногда и несколько перезагрузок, но как-то неустойчиво).
В чем тут причина? | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 12:34)
| | ммм... ну "выведет" скрипт по cronу
<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=db-bot-arh.php'></HEAD></HTML>
|
но КОМУ и КУДА он выведет? )
Это по идее для браузера... | |
|
|
|
|
|
|
|
для: ddhvvn
(15.03.2009 в 13:31)
| | " КОМУ и КУДА он выведет? )"
Я вот этого и сам до конца не понимаю... | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 13:52)
| | а зачем крону такое тыкать вообще? | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 13:52)
| | никому и в никуда )
Поэтому такое не пройдет с кроном.
это может обработать либо бразуер, либо скрипт, который знает что надо сделать. | |
|
|
|
|
|
|
|
для: ddhvvn
(15.03.2009 в 14:12)
| | "а зачем крону такое тыкать вообще?"
Для автоматической архивации. | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 14:53)
| | Тем более не понятно тогда.
"Автоматической" это как?
Почти нельзя запустить сам скрипт архивации (он же Ваш)? | |
|
|
|
|
|
|
|
для: ddhvvn
(15.03.2009 в 15:43)
| | Автоматически - это ежедневно в четыре часа утра, когда загрузка сервера минимальна. Идет почти час. | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 16:31)
| | ну так для этого и создан cron =)
Не пойму зачем вообщем этот странный редирект? | |
|
|
|
|
|
|
|
для: ddhvvn
(15.03.2009 в 17:09)
| | Про cron и речь.
Сron инициирует исполнение скрипта, но скрипт не может выполнить всю работу, поскольку для её исполнения требуется слишком много времени непрерывного функционирования. Чобы решить эту проблему, я ограничиваю объем обрабатываемых данных в размере 500 строк таблицы. Но реально строк может быть и 300, и тридцать тысяч. Поэтому надо сделать так, чтобы после обработки этих пятисот строк скрипт, если это нужно, САМ запустился еще раз и обработал следующие 500 строк, и так до полной обработки всей информации.
Вот для этого и редирект на самого себя. | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 18:15)
| | Не очень хорошо.
Да и как же у Вас скрипт узнает сколько уже обработано? Или он заново все проверяет?
P.S.: если у Вас [на хостинге] время выполнения скрипта не ограничено жестко, то можно сделать
<?php
set_time_limit(0);
..
?>
|
и скрипт будет работать до тех пор, пока не завершит свою работу естественным способом. | |
|
|
|
|
|
|
|
для: ddhvvn
(15.03.2009 в 19:13)
| | "Да и как же у Вас скрипт узнает сколько уже обработано?"
С этим параметром проблем нет - ведь обработанные строки, как я уже написал выше, удаляются из таблицы с исходными данными.
"если у Вас [на хостинге] время выполнения скрипта не ограничено жестко, то можно сделать set_time_limit(0); "
Весьма разочаровался в этом параметре и взял себе за правило не применять его без крайней необходимости. Причина - весьма убедительное разъяснение Trianon
о том, что база не гарантирует работоспособность при выполнении одного запроса более, чем 30 секунд, вне завистмости от set_time_limit.
=============
Похоже, что придется поискать иное решение. | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 20:51)
| | Скажу по секрету, крон не знает хтмл тегов. Их знает браузер :) | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 20:51)
| | >"если у Вас [на хостинге] время выполнения скрипта не ограничено жестко, то можно сделать set_time_limit(0); "
>
>Весьма разочаровался в этом параметре и взял себе за правило не применять его без крайней необходимости. Причина - весьма убедительное разъяснение Trianon
> о том, что база не гарантирует работоспособность при выполнении одного запроса более, чем 30 секунд, вне завистмости от set_time_limit.
Вообще-то я говорил не о базе, а о сервере. О http-сервере. Которого в случае вызова по локальному cron просто нет.
Хотя скрипт, выполняющийся час, всё равно наводит на мысль, что где-то что-то не так. | |
|
|
|
|
|
|
|
для: Владимир55
(15.03.2009 в 12:34)
| | Все, что выводит задание по cron - игнорируется, тем более HTML-тэги, которые интерпретируются браузером, находящимся по другую сторону сети от сервера. | |
|
|
|