Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   php скрипт падает без причины (http://forum.sape.ru/showthread.php?t=99047)

slovoblud 22.03.2020 01:13

php скрипт падает без причины
 
Здравствуйте уважаемые форумчане. Прошу подсказки у тех кто имеет опыт написания парсеров, демонов либо других "долгоиграющих" php скриптов. Суть такая пишу скрипт загрузки товаров в интернет магазин из xml прайса. Столкнулся с той проблемой что на моем сервере парсер отрабатывает нормально, однако на хостинге клиента прекращает работу спустя 20-60 минут после запуска. В итоге я решил проверить как долго вообще будет выполнятся php скрипт на клиентском хостинге, для проверки написал что то вроде демона:

PHP код:

<?php
ini_set
('max_execution_time'0);
set_time_limit(0);
ini_set("memory_limit""128M");
ignore_user_abort(true);
ini_set('error_reporting'E_ALL);
ini_set('display_errors'1);
ini_set('display_startup_errors'1);

function 
shutdown()
{
    
file_put_contents(__DIR__ '/log/shutdown_log.txt''Выполнили функцию shutdown!'.PHP_EOLFILE_APPEND);
    
$err_arr error_get_last();
    
$err 'type - '.$err_arr['type'] . ' | message - '$err_arr['message'] . ' | file - '.$err_arr['file']. ' | line - '.$err_arr['line'];
    
file_put_contents(__DIR__ '/log/shutdown_log.txt'$errFILE_APPEND);
    
}

function 
sig_handler($signo)
{
    
$info "\n" 'received signal ' $signo "\n";
    
$info .= "\n" 'Выполнили функцию sig_handler! ' $signo "\n";
    
file_put_contents(__DIR__ '/log/sig_handler_log.txt'$info.PHP_EOLFILE_APPEND);
    
$err_arr error_get_last();
    
$err 'type - '.$err_arr['type'] . ' | message - '$err_arr['message'] . ' | file - '.$err_arr['file']. ' | line - '.$err_arr['line'];
    
file_put_contents(__DIR__ '/log/sig_handler_log.txt'$errFILE_APPEND);
    exit;
}

register_shutdown_function('shutdown');
declare(
ticks 1);
pcntl_signal(SIGTERM"sig_handler");
pcntl_signal(SIGINT"sig_handler");


$time date('H-i-s');
file_put_contents(__DIR__ '/log/time_test_ON.txt'$time);

while(
true){
    
$time date('H-i-s');
    
file_put_contents(__DIR__ '/log/time_test_log.txt'$time);
    
sleep(1);
}

После запуска демона через консоль, он прекращает работу примерно через 20 минут, при этом shutdown() и sig_handler() - никаких логов не создают. Хотя если убить скрипт через консоль командой kill pid то обе функции отрабатывают нормально, то есть логи создаются.

В общем я в тупике, предполагаю что это некое ограничение на хостинге, однако не могу понять в чем именно оно состоит и как его пофиксить.

zhegloff 22.03.2020 03:04

Лучше спросить у хостера сначала.

slovoblud 22.03.2020 20:09

Цитата:

Сообщение от zhegloff (Сообщение 1493629)
Лучше спросить у хостера сначала.

Я бы с удовольствием, просто сперва понять бы о чем конкретно их спрашивать. Типа какое ограничение изменить и тому подобное... И еще как бы понять в каком режиме на хостинге запущен php как CGI или как модуль Apache через phpinfo() это как то можно понять?

Добавлено через 16 часов 59 минут
Получил ответ от хостинга:
"Здравствуйте, на наших серверах виртуального хостинга есть ограничение в 1200 секунд на время работы пользовательского процесса. Запущенные Вами процессы были остановлены при превышении данного лимита:" - так что таки да на их стороне была проблема.

Anadonam 25.03.2020 19:37

20 минут ???
тут не ошибка??? (не секунд? )

да вы сума сошли......
не один адекватный хостинг не позволит вам такое!

slovoblud 25.03.2020 19:48

Цитата:

Сообщение от Anadonam (Сообщение 1493654)
20 минут ???
тут не ошибка??? (не секунд? )

да вы сума сошли......
не один адекватный хостинг не позволит вам такое!

Ну оно как бы спрос не бьет в нос) Да просто писал сложный скрипт загрузки товаров с использованием API, из-за которого все время валились ошибки. В итоге грешил не на хостинг, а на то что скрипт написал криво. И только спустя пару дней додумался проверить, а сколько вообще процесс живет на хостинге. В общем жесть... век живи век учись. В будущем для подобных задач только vps.

Anadonam 25.03.2020 20:11

да мне трудно представить сколько это товаров (карточек)
миллионов 50 - 60 ? ну так тогда нужен иной подход и таблица в БД не одна!

ну так из расчета
50 000 хватает 15-20 секунд.. (с большим числом работать не довелось)

slovoblud 25.03.2020 21:16

Цитата:

Сообщение от Anadonam (Сообщение 1493656)
да мне трудно представить сколько это товаров (карточек)
миллионов 50 - 60 ? ну так тогда нужен иной подход и таблица в БД не одна!

Не так много. Счет идет на несколько тысяч, может несколько десятков тысяч. Просто загрузка идет не на прямую в БД, а через woocommerce api, товары вариативные, с разными цветами, размерами, соответственно для каждой вариации свои цена артикул и тд. Поэтому много проверок идет по ходу загрузки.
Цитата:

Сообщение от Anadonam (Сообщение 1493656)
50 000 хватает 15-20 секунд.. (с большим числом работать не довелось)

Интересно... не видел такой скорости. Это наверное если готовые данные напрямую в базу пулять, без какого либо парсинга исходного документа, перебора товаров, проверки условий и прочего, тогда наверное можно с такой скоростю отработать.


Часовой пояс GMT +3, время: 15:54.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.