Здравствуйте уважаемые форумчане. Прошу подсказки у тех кто имеет опыт настройки php для парсеров, демонов либо других "долгоиграющих" скриптов. Суть такая пишу скрипт загрузки товаров в интернет магазин из xml прайса. Столкнулся с той проблемой что на моем сервере парсер отрабатывает нормально, однако на хостинге клиента прекращает работу спустя 20-60 минут после запуска. В итоге я решил проверить как долго вообще будет выполнятся 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_EOL, FILE_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', $err, FILE_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_EOL, FILE_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', $err, FILE_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 то обе функции отрабатывают нормально, то есть логи создаются.
В общем я в тупике, предполагаю что это некое ограничение на хостинге, однако не могу понять в чем именно оно состоит и как его пофиксить.
Вот phpinfo хостинга.
Сам хостинг расположен на twinservers.net панель управления Cpanel, судя по выделенной памяти похож на vps но точно я не уверен.