Работа скрипта >>> 2 часов

zarus

Хитрожопый макак
Работа скрипта >>> 2 часов

Не спрашивайте, зачем мне это надо - надо и все. Если скажете делай на Delphi/C#/C++, то я уже об этом задумываюсь, но пока...
Есть скрипт, который работает очень долго - по расчетным формулам от 1-2 часов до 2-3 суток. Проблема в том, как его заставить крутиться до бесконечности (т.е. успешного/неуспешного завершения) и браузер при этом не вылетал по таймауту. Возможно, что-то настроить в реестре Windows?
В данный момент, браузер "отваливается" через 5-6 часов работы, после чего апач еще мурыжится 2-3 часа и выполнение скрипта прерывается. Проверял по входным данным - до конца он не доходил :(
Ай нид йо хэлп! :)
 

tf

крылья рулят
zarus правильно думаеш. сделай на Delphi/C#/C++ к томуже быстрее будет
браузеры не предназначены для такой экстпумальной работы
а можно из командной строки запустить
 

white phoenix

Новичок
А можно сделать:
PHP:
set_time_limit(0);
ignore_user_abort(TRUE);
запустить броузером и закрыть его, результат работы записывать скриптом в файл.
 

zarus

Хитрожопый макак
Командная строка не вариант - пользователь должен наблюдать процесс работы скрипта. Плюс сам скрипт включает в себя "оболочку" для задания стартовых параметров запуска. Так как это дело обрабатывается удаленно :( Или предлагаете делать через exec + socket?
Но ведь чаты же как-то работают без daemon. Где прочитать про такие технологии? С примерами...
Эх... придется, видимо, углубиться в "демонологию"...

-~{}~ 29.12.05 17:54:

Автор оригинала: white phoenix
А можно сделать:
PHP:
set_time_limit(0);
ignore_user_abort(TRUE);
запустить броузером и закрыть его, результат работы записывать скриптом в файл.
За второй параметр спасибо, попробую поставить и запустить. Надеюсь, что заработает. Но в любом случае - браузер отвалится и вывода процесса уже не будет, соответственно, на удаленном компьютере не известно, завершился ли процесс или все еще "жив"... Но это уде решаемо, главное, чтобы скрипт крутился!
 

whirlwind

TDD infected, paranoid
> Командная строка не вариант - пользователь должен наблюдать процесс работы скрипта.

и что же там за информация такая, что пользователь ее будет наблюдать

> очень долго - по расчетным формулам от 1-2 часов до 2-3 суток

Это заведомо ущербная схема, которая чревата сложностями реализации и глюками уже на этапе отладки. Надо разделить задачу на две части: рабочая и интерфейсная. Например так: инициация fork + setsid, порожденный регулярно обновляет файлик статистики, который может быть например в виде массива php или готовой статической странички.
 

white phoenix

Новичок
zarus
Не придумывай проблемы там где их нет.
> Командная строка не вариант - пользователь должен наблюдать процесс работы скрипта.
Забавная фраза.
> Плюс сам скрипт включает в себя "оболочку" для задания стартовых параметров запуска.
> Так как это дело обрабатывается удаленно
Значит через броузер.
> Или предлагаете делать через exec + socket?...
Я же говорю, запускай броузером процесс, и результаты записывай в файл (можно и промежуточные), если надо в реальном времени смотреть то читай этот файл и показывай.

Added: А зачем exec + socket?
 

zarus

Хитрожопый макак
Автор оригинала: white phoenix
zarus
Не придумывай проблемы там где их нет.
> Командная строка не вариант - пользователь должен наблюдать процесс работы скрипта.
Забавная фраза.
> Плюс сам скрипт включает в себя "оболочку" для задания стартовых параметров запуска.
> Так как это дело обрабатывается удаленно
Значит через броузер.
> Или предлагаете делать через exec + socket?...
Я же говорю, запускай броузером процесс, и результаты записывай в файл (можно и промежуточные), если надо в реальном времени смотреть то читай этот файл и показывай.
Так и сделаю :)
 

Денч

Новичок
>>пользователь должен наблюдать процесс работы скрипта.

>> очень долго - по расчетным формулам от 1-2 часов до 2-3 суток

Я правильно понял - пользователь должен наблюдать процесс работы скрипта от1-2 часов до 2-3 дней? Гдеж такие пользователи водятся?
 

white phoenix

Новичок
Денч
> Гдеж такие пользователи водятся?
Поэтому я и предложил хранить результаты в файле, чтобы пользователь мог запустить процесс, пойти спать, а проснувшись увидеть результат.
 

Денч

Новичок
white phoenix
Ну я просто удивляюсь, что он сам об этом не подумал...
 

moxnatiy

Новичок
zarus
что за бред?

пускай из консоли. пусть висит и делает то что тебе надо.
все остальные варианты не имеют смысла.
 

magic

lancer
На днях решал такую задачу. Сразу оговорюсь, что пользователям такой скрипт не нужен. Выполнялась чисто утилитарная задача - remote backup. :)

set_time_limit(0);
ignore_user_abort(TRUE);
и запуск через консоль не помогут. Через какое то время начнет отваливаться MySQL. :)

Делаем так - промежуточные данные храним в кеше (файлы или БД). Скрипт запускается с заданными параметрами и выполняет необходимую задачу по транзакциям (минимальным кускам).

После отработки выводится статус операции. Если нет ошибок - делается рефреш через HTML или JavaScript на самого себя и т.д.
 

Kelkos

Сам себе программер
После отработки выводится статус операции. Если нет ошибок - делается рефреш через HTML или JavaScript на самого себя и т.д.
А вот и в таком случае не так всё просто.. Делал индексирующего бота и сделал такойже прицип. Раз в 1-2 дня возникает ошибка на сервере и скрипт прекращает работу. Ну да.. да.. согласен - хостер ленивый паразит не может наладить сервер. Сдела так - на отдельно взятый комп (использовался под другие нужды) кинул маленький скриптик, который запрашивал рабочий (file_get_contents) и смотрел результат.. если ок - кидает авторефреш НА СЕБЯ.. если тот скрипт выдал ошибку - ждём минуту и опять авторефреш и чтение результатов работы того скрипта.. В таком тандеме так и продолжают работать неограниченное время. Плюс ко всему делатся лог выполнения (результаты работы первого скрипта записываются), что позволило выцепить некотрые ошибки.
 

white phoenix

Новичок
Kelkos
Ну и бред. Делается всё очень просто, я вчера тоже сделал индексирующего робота (индексирует в MySQL), создал правило cron'а для запуска скрипта каждую минуту. Скрипт перед началом работы проверяет заблокированность ([m]flock[/m]) специального файла, если он заблокирован, то скрипт завершает работу (если он заблокирован значит скрипт уже запущен), если же файл не заблокирован, то скрипт блокирует его, читает файл с сериализированным деревом рекурсии (которое каждые 5 минут копируется), и продолжает индексацию с того места на котором остановился.

-~{}~ 29.12.05 22:00:

magic
> Через какое то время начнет отваливаться MySQL.
Имеешь в виду соеденение PHP и MySQL? Разве это проблема?
 

Kelkos

Сам себе программер
создал правило cron'а для запуска скрипта каждую минуту
ну да.. когда ты сам себе хостер - то делай что угодно.. а вот на общественном такие вещи не получаются.
сериализированным деревом рекурсии
уу.. ты чего индексируешь?
white phoenix
давай не будем ТАК категоричны.. ок? В любом случае есть плюсы и минусы.
 

Dreammaker

***=Ф=***
Kelkos, cron сейчас почти на всех хостингах есть... Это скорее исключение если его нет.
 

Kelkos

Сам себе программер
Dreammaker
да есть.. есть.. только ограничение - минимум 10 минут. Была бы минута - я бы и не парился.
 

magic

lancer
Я запускал скрипт 0.3-0.8 секунд на каждую операцию. С кроном такое не канает :)
 

white phoenix

Новичок
Kelkos
> А вот на общественном такие вещи не получаются.
На любом нормально хостинге есть cron, даже когда 10 минут, ничего страшного, время простоя минимальное, ~2 дня работает а потом максимум 10 минут простой.
> Давай не будем ТАК категоричны.. ок? В любом случае есть плюсы и минусы.
Конечно везде есть плюсы и минусы, перечисли плюсы твоего метода перед моим.
 
Сверху