Почему парсер php через час работы останавливается?
Привет, написал парсер, запускаю и примерно через час он останавливается, пробовал несколько раз, логи нечего не показывают. В парсере везде где только можно стоит try catch. Оперативы уже включил 1ГБ в php.ini. Парсер активно работает с MySql.
Что может быть, такое ощущение что где то стоит лимит на выполнение, потому что работает примерно одно время и тухнет.
Что думаете из за чего?
Есть конечно переменные отвечающие за время выполнения, за максимальный объем памяти. Расставьте по скрипту сообщения в консоль и смотрите где завершается. А вообще логировать должен, если падает скрипт.
по расчетам парсер должен работать не сколько месяцев, я не могу держать консоль открытой, по любому должен логироватся. И да я запускаю его с браузера, может из за этого, сейчас почитал, пишут что лучше с консоли запускать, сейчас буду пробовать с консоли
Никто не делает такие "вечные" скрипты на php. Это очень ненадёжно. Глюкнуло что-то, провайдер сервер ребутнул - и всё заново начинать?
Более правильно разбивать задачу на куски и запускать каждый кусок по cron. Например, если тебе спарсить 500к страниц надо - сохри ссылки на них в базе, в цикле выбирай по одной и скачивай. После успешного скачивания помечай в бд, что страница успешно скачалась. Теперь, если даже скрипт грохнется, ты не начнёшь заново, а продолжишь с первой нескачанной страницы.
При таком подходе тебе не нужен вечный скрипт. Запускай по 100 страниц пачками в кроне.
Проверь, не отваливается ли коннект к MySQL. Даже для меня было неожиданностью, что этот коннект не вечен и мускуль разрывает его через фиксированное время. Оно, кстати, настраивается в my.cnf. Но лучше периодически обрубать старый коннект и создавать новый.
В оптимале настроить перезапуск раз в минуту+- и запуск нескольких копий скрипта. Это позволит как избежать проблем с ограничениями, так и ускорит работу и снизит нагрузку на сервер.
Плюс экономия времени, т.к. не придется дебажить такую фигню.