Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Здравствуйте уважаемые форумчане. Прошу подсказки у тех кто имеет опыт настройки 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 но точно я не уверен.

Змінено користувачем kairos
Надіслати
Поділитися на інших сайтах


Думаю, данная особенность вызвана настройкой одного из лимитов FastCGI на веб-сервере LiteSpeed.
Попробуйте локально убрать данный лимит, добавив следующие строки в .htaccess:

 

RewriteEngine On
RewriteRule .* - [E=noconntimeout:1]

 

Либо для отдельных скриптов:

 

RewriteEngine On
RewriteRule (wp-cron|backupbuddy|importbuddy)\.php - [E=noconntimeout:1]

Змінено користувачем shelkunov
Надіслати
Поділитися на інших сайтах

1 hour ago, shelkunov said:

Думаю, данная особенность вызвана настройкой одного из лимитов FastCGI на веб-сервере LiteSpeed.
Попробуйте локально убрать данный лимит, добавив следующие строки в .htaccess:

 

RewriteEngine On
RewriteRule .* - [E=noconntimeout:1]

 

Либо для отдельных скриптов:

 

RewriteEngine On
RewriteRule (wp-cron|backupbuddy|importbuddy)\.php - [E=noconntimeout:1]

Попробовал - результат тот же, скрипт падает ровно через 20 минут.

Надіслати
Поділитися на інших сайтах


33 minutes ago, LTRay said:

kvm / openvz убивает его. Разговаривать тут надо с тех поддержкой

Спасибо. Написал заказчику, пусть долбит саппорт, будет весело если там еще и хостинг забугорный.)

Надіслати
Поділитися на інших сайтах


6 часов назад, kairos сказал:

Спасибо. Написал заказчику, пусть долбит саппорт, будет весело если там еще и хостинг забугорный.)

 

это hostiq

Надіслати
Поділитися на інших сайтах

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

 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.