Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разные результаты при вызове скрипта из броузера и запуску по Cron
 
 автор: Владимир55   (15.03.2009 в 12:34)   письмо автору
 
 

Скрипт построчно берет инфрмацию из таблицы базы, обрабатывает ее и записывает в другую таблицу, а обработанную строку из исходной таблицы удаляет. Поскольку время такой обработки получилось слишком большим, я решил проводить её порциями по 500 строк при каждом вызове скрипта. А для того, что бы обработать все, что накопилось в исходной таблице, скрипт автоматически перезагружается до тех пор, пока в исходной таблице есть больше десяти строк. Организовано это так:
    if ($n_bot > 10)
    {
        echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=db-bot-arh.php'></HEAD></HTML>";
        exit;
    }


Скрипт работает нормально при его вызове из броузера, осуществляяя десятки перезапусков, если надо. А вот при запуске по Cron я наблюдаю только однократное исполнение (хотя иногда и несколько перезагрузок, но как-то неустойчиво).

В чем тут причина?

  Ответить  
 
 автор: ddhvvn   (15.03.2009 в 13:31)   письмо автору
 
   для: Владимир55   (15.03.2009 в 12:34)
 

ммм... ну "выведет" скрипт по cronу
<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=db-bot-arh.php'></HEAD></HTML>

но КОМУ и КУДА он выведет? )
Это по идее для браузера...

  Ответить  
 
 автор: Владимир55   (15.03.2009 в 13:52)   письмо автору
 
   для: ddhvvn   (15.03.2009 в 13:31)
 

" КОМУ и КУДА он выведет? )"

Я вот этого и сам до конца не понимаю...

  Ответить  
 
 автор: sl1p   (15.03.2009 в 14:10)   письмо автору
 
   для: Владимир55   (15.03.2009 в 13:52)
 

а зачем крону такое тыкать вообще?

  Ответить  
 
 автор: ddhvvn   (15.03.2009 в 14:12)   письмо автору
 
   для: Владимир55   (15.03.2009 в 13:52)
 

никому и в никуда )
Поэтому такое не пройдет с кроном.
это может обработать либо бразуер, либо скрипт, который знает что надо сделать.

  Ответить  
 
 автор: Владимир55   (15.03.2009 в 14:53)   письмо автору
 
   для: ddhvvn   (15.03.2009 в 14:12)
 

"а зачем крону такое тыкать вообще?"

Для автоматической архивации.

  Ответить  
 
 автор: ddhvvn   (15.03.2009 в 15:43)   письмо автору
 
   для: Владимир55   (15.03.2009 в 14:53)
 

Тем более не понятно тогда.
"Автоматической" это как?
Почти нельзя запустить сам скрипт архивации (он же Ваш)?

  Ответить  
 
 автор: Владимир55   (15.03.2009 в 16:31)   письмо автору
 
   для: ddhvvn   (15.03.2009 в 15:43)
 

Автоматически - это ежедневно в четыре часа утра, когда загрузка сервера минимальна. Идет почти час.

  Ответить  
 
 автор: ddhvvn   (15.03.2009 в 17:09)   письмо автору
 
   для: Владимир55   (15.03.2009 в 16:31)
 

ну так для этого и создан cron =)
Не пойму зачем вообщем этот странный редирект?

  Ответить  
 
 автор: Владимир55   (15.03.2009 в 18:15)   письмо автору
 
   для: ddhvvn   (15.03.2009 в 17:09)
 

Про cron и речь.

Сron инициирует исполнение скрипта, но скрипт не может выполнить всю работу, поскольку для её исполнения требуется слишком много времени непрерывного функционирования. Чобы решить эту проблему, я ограничиваю объем обрабатываемых данных в размере 500 строк таблицы. Но реально строк может быть и 300, и тридцать тысяч. Поэтому надо сделать так, чтобы после обработки этих пятисот строк скрипт, если это нужно, САМ запустился еще раз и обработал следующие 500 строк, и так до полной обработки всей информации.

Вот для этого и редирект на самого себя.

  Ответить  
 
 автор: ddhvvn   (15.03.2009 в 19:13)   письмо автору
 
   для: Владимир55   (15.03.2009 в 18:15)
 

Не очень хорошо.
Да и как же у Вас скрипт узнает сколько уже обработано? Или он заново все проверяет?

P.S.: если у Вас [на хостинге] время выполнения скрипта не ограничено жестко, то можно сделать
<?php
  set_time_limit
(0);
  ..
?>

и скрипт будет работать до тех пор, пока не завершит свою работу естественным способом.

  Ответить  
 
 автор: Владимир55   (15.03.2009 в 20:51)   письмо автору
 
   для: ddhvvn   (15.03.2009 в 19:13)
 

"Да и как же у Вас скрипт узнает сколько уже обработано?"

С этим параметром проблем нет - ведь обработанные строки, как я уже написал выше, удаляются из таблицы с исходными данными.

"если у Вас [на хостинге] время выполнения скрипта не ограничено жестко, то можно сделать set_time_limit(0); "

Весьма разочаровался в этом параметре и взял себе за правило не применять его без крайней необходимости. Причина - весьма убедительное разъяснение Trianon
о том, что база не гарантирует работоспособность при выполнении одного запроса более, чем 30 секунд, вне завистмости от set_time_limit.

=============
Похоже, что придется поискать иное решение.

  Ответить  
 
 автор: Ставинский   (16.03.2009 в 03:23)   письмо автору
 
   для: Владимир55   (15.03.2009 в 20:51)
 

Скажу по секрету, крон не знает хтмл тегов. Их знает браузер :)

  Ответить  
 
 автор: Trianon   (23.03.2009 в 09:18)   письмо автору
 
   для: Владимир55   (15.03.2009 в 20:51)
 

>"если у Вас [на хостинге] время выполнения скрипта не ограничено жестко, то можно сделать set_time_limit(0); "
>
>Весьма разочаровался в этом параметре и взял себе за правило не применять его без крайней необходимости. Причина - весьма убедительное разъяснение Trianon
> о том, что база не гарантирует работоспособность при выполнении одного запроса более, чем 30 секунд, вне завистмости от set_time_limit.

Вообще-то я говорил не о базе, а о сервере. О http-сервере. Которого в случае вызова по локальному cron просто нет.
Хотя скрипт, выполняющийся час, всё равно наводит на мысль, что где-то что-то не так.

  Ответить  
 
 автор: cheops   (16.03.2009 в 16:54)   письмо автору
 
   для: Владимир55   (15.03.2009 в 12:34)
 

Все, что выводит задание по cron - игнорируется, тем более HTML-тэги, которые интерпретируются браузером, находящимся по другую сторону сети от сервера.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования