[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: AJAX при CRON'e
MainVoid
Всем привет!

Существует уже рабочая версия парсеров xml файлов для импорта данных из этих самых XML в базу данных сайта. Т.к. файлы большие импорт ведется в несколько этапов, при помощи ajax.
Со страницы ajax посылает запрос на обработчик с заданным шагом. Скрипт проводящий обработку проверяет время, если время приближается к шагу - то он выдает номер последней обработанной записи и вырубает скрипт, чтобы не вылетить по таймауту. Обработчик ajax ответа смотрит, если был отдан номер последней записи - посылает еще один запрос с указанием этого номера, скрипт получив параметр номера пропускает все номера ниже этого, и так до того момента, пока весь XML файл не будет обработан.

Вопрос: можно ли настроить CRON таким образом, чтобы он использовал страницу с этим AJAX запросом? т.е. повесить например на событие onload?

Ранее был вариант заменять аякс на простое перенаправление скрипта на самого себя с указанием последней строки - получался перезапуск скрипта и проблема с таймаутом отпадала, но браузеры выдавали сообщения вида "браузер обнаружил неверное перенаправление" или "браузер обнаружил, что на сервере используется неверное перенаправление, которое не может быть закончено". Может для крона прокатит такой вариант?



Спустя 1 час, 35 минут, 2 секунды (2.09.2009 - 13:39) glock18 написал(а):
CRON - запускается на сервере и обрабатывается тоже на сервере.
AJAX - взаимодействие клиента с сервером.

единственная призрачная возможность:
запускать кроном браузер (не через php разумеется). здесь нужно еще как-то при этом запуске показать браузеру какую страницу открыть нужно. Чисто теоретически для этого могут быть какие-то ключи... скорее всего в достаточно старых браузерах.

Достаточно старый браузер - нет Ajax. smile.gif

Вывод: о{4}чень маловероятно, что что-то выйдет из этого.

Спустя 12 минут, 8 секунд (2.09.2009 - 13:51) MainVoid написал(а):
угу, я так и думал, а что насчет варианта с перенаправлением скрипта на самого себя?

Спустя 40 минут, 12 секунд (2.09.2009 - 14:31) glock18 написал(а):
Если смысл в том, чтобы не превысить max_execution_time (и его нельзя сменить), то вполне резонно. Необходимо записывать просто состояние текущей обрабокти в бд или файле.

Если дело не во времени, то в чем?

Спустя 2 часа, 13 минут, 24 секунды (2.09.2009 - 16:44) MainVoid написал(а):
Дело во времени. По крайней мере запускать из браузера этот скрипт без аякса или такого "самоперенаправления" чревато ошибкой 502 Bad Gateway на определенном моменте работы скрипта, как дело обстоит при запуске от имени сервера - не знаю.
Вопрос в том, будет ли скрипт делать редирект сам на себя, будучи запущенный через cron? И не вылетит ли он также как и браузер с ошибкой "слишком много перенаправлений" или чем-то подобным?

Спустя 9 минут, 38 секунд (2.09.2009 - 16:54) glock18 написал(а):
Цитата
Вопрос в том, будет ли скрипт делать редирект сам на себя, будучи запущенный через cron? И не вылетит ли он также как и браузер с ошибкой "слишком много перенаправлений" или чем-то подобным?


не могу подсказать. самый простой способ проверить это - проверить это smile.gif мне кажется, ничего такого не должно быть.

еще одно, подумай - может есть возможность просто max_execution_time выставить в 0?

Спустя 3 часа, 18 минут, 33 секунды (2.09.2009 - 20:13) MainVoid написал(а):
Да пробую, просто может у кого мысли еще есть.. на хостинге вот надо обновления таблицы крон по 15 минут ждать, офигеешь тестировать, сначала права забыл поставить, потом оказалось инклуды не срабатывают из за $_SERVER['DOCUMENT_ROOT'] не определенного, пока в общем доберешься до полевых испытаний, состаришься..

Неа, пытался выставить в 0, был послан..

Сейчас протестирую редирект - по результатам отпишусь

Спустя 3 часа, 26 минут, 29 секунд (2.09.2009 - 23:39) MainVoid написал(а):
Нет, не работает редирект.

Спустя 7 часов, 36 минут, 48 секунд (3.09.2009 - 07:16) glock18 написал(а):
Цитата
Нет, не работает редирект.

Конкретно?

Если на себе не перенаправляет, может стоит попробовать делать это через скрипт посредник?

parser.php ... redirect to waitroom.php
waitroom.php. 5 sec. sleep... redirect to parser.php

что типа такого. в общем редиректить не на себя.

Спустя 3 часа, 48 минут, 46 секунд (3.09.2009 - 11:05) MainVoid написал(а):
ну я в файле прописал редирект на самого себя, через браузер - работает, запускаю через крон - отрабатывает только один раз, без редиректа.
PHP
parser.php ... redirect to waitroom.php
waitroom
.php5 secsleep... redirect to parser.

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

Спустя 23 минуты, 27 секунд (3.09.2009 - 11:28) glock18 написал(а):
Цитата
это директивы для крона?

нет

это слова простые. ну чтобы понятно было откуда куда редиректить

Спустя 7 минут, 47 секунд (3.09.2009 - 11:36) sergeiss написал(а):
MainVoid - а зачем тут ajax вообще нужен? Можно же и без него обойтись.

Во-первых, кроме max_execution_time в ини-файле есть еще функция set_time_limit, которая позволяет динамически, для одного скрипта, менять лимит его выполнения (в дополнение к max_execution_time).

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

Спустя 40 минут, 45 секунд (3.09.2009 - 12:17) glock18 написал(а):
Цитата
Во-вторых, если приходится (или хочется) разбивать загрузку на части, то тогда ты можешь просто вызвать скрипт "сам из себя" с помощью JavaScript. При этом можно сохранить параметры для продолжения загрузки где-нибудь, например в сессии.


это же крон. откуда там js возьмется?

Спустя 35 минут, 19 секунд (3.09.2009 - 12:52) sergeiss написал(а):
Цитата (glock18 @ 3.09.2009 - 13:17)
это же крон. откуда там js возьмется?

Если честно, никогда не использовал юниксовый cron. Потому что у меня на работе виндовый сервер. А там, когда я запускаю плановую задачу, она запускается в браузере. И имеет все обычные возможности. В том числе и JS. Чем я и пользуюсь, именно по описанной мной схеме.
Потому об этом тут и написал.

Спустя 21 минута (3.09.2009 - 13:13) glock18 написал(а):
ммм... ничего се... стандартный запуск крона

php.exe <script>

тут неоткуда браузеру появиться. или я чего-то недопонимаю, или ты запускаешь его иначе.
крон и браузер для меня почти несовместимые вещи smile.gif

Спустя 16 минут, 25 секунд (3.09.2009 - 13:29) sergeiss написал(а):
glock18 - я ж говорю - запускаю ПОД ВИНДОЙ плановую задачу!!! А это - браузер с нужным скриптом в качестве параметра smile.gif

Как запускается под юниксом - ХЗ.

Спустя 2 часа, 33 минуты, 21 секунда (3.09.2009 - 16:03) hara_ написал(а):
А зачем усложнять,
для чего нужно перенаправление, - ну сохраняйте текущее положение работы скрипта куда
нибудь, когдя время заканчивается, - в файл обычный например.
При запуске читайте значение и продолжайте.

PS не повезло вам с хостингом. (это я по поводу обновления крона раз в 15 минут)


_____________
Каная
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.