- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте уважаемые форумчане. Прошу подсказки у тех кто имеет опыт настройки php окружения для парсеров, демонов либо других "долгоиграющих" скриптов. Суть такая пишу скрипт загрузки товаров в интернет магазин из xml прайса. Столкнулся с той проблемой что на моем сервере парсер отрабатывает нормально, однако на хостинге клиента прекращает работу спустя 20-60 минут после запуска. В итоге я решил проверить как долго вообще будет выполнятся php скрипт на клиентском хостинге, для проверки написал что то вроде демона:
После запуска демона через консоль, он прекращает работу примерно через 20 минут, при этом shutdown() и sig_handler() - никаких логов не создают. Хотя если убить скрипт через консоль командой kill pid то обе функции отрабатывают нормально, то есть логи создаются.
В общем я в тупике, предполагаю что это некое ограничение на хостинге, однако не могу понять в чем именно оно состоит и как его пофиксить.
Обратится в саппорт для начала?
Никакого тупика нет, на обычном хостинге всё так и будет. Покупайте VPS, чтобы работать без ограничений или переделывайте на крон.
sitesoft,
1) register_shutdown_function обычно вываливается из текущей директории, а иногда и из текущего юзера. у Вас путь непонятно какой в результате оказывается, поэтому логи может и пробуют писаться, просто не туда. Используйте абсолютный жестко заданный путь и сделайте директорию с логами 777, тогда должно записать.
2) ограничения по времени выполнения нередко можно обойти через тот же register_shutdown_function , запускайте скрипт, регистрируйте парсер через register_shutdown_function и умирайте - может работать вечно на большинстве хостингов, т.к. "что мертво, то умереть не может"©
Обратится в саппорт для начала?
Можно, но сперва хорошо бы понять что именно от них требовать.
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('track_errors', 1);
ini_set('html_errors', 1);
while(true){
$time = date('H-i-s');
file_put_contents(__DIR__ . '/log/time_test_log.txt', $time);
sleep(1);
}?>
Вот это как запускаете? просто php 111.php ?
Попробуйте запустить как /usr/bin/nohup php 111.php >/tmp/111.log 2>&1 &
Не вижу в вашем коде ничего криминального. Дескрипторы file_put_contents должны закрываться, т.е. в количество открытых файлов это не упирается. Попробуйте через nohup, так как у вас может рваться контекст с консолью при открытом демоне. Поток переведет /tmp/111.log в том числе и ошибки. Если и это дропнет, то значит хостинг.
sitesoft,
1) register_shutdown_function обычно вываливается из текущей директории, а иногда и из текущего юзера. у Вас путь непонятно какой в результате оказывается, поэтому логи может и пробуют писаться, просто не туда. Используйте абсолютный жестко заданный путь и сделайте директорию с логами 777, тогда должно записать.
2) ограничения по времени выполнения нередко можно обойти через тот же register_shutdown_function , запускайте скрипт, регистрируйте парсер через register_shutdown_function и умирайте - может работать вечно на большинстве хостингов, т.к. "что мертво, то умереть не может"©
Вот как раз в том то и дело что скрипт обрывается "молча" потому что если не дожидаясь 20 минут убиваю процесс вручную командой kill pid то тогда обе функции отрабатывают и логи создаются, поэтому не похоже что проблема в путях.
---------- Добавлено 22.03.2020 в 05:01 ----------
Вот это как запускаете? просто php 111.php ?
Попробуйте запустить как /usr/bin/nohup php 111.php >/tmp/111.log 2>&1 &
Не вижу в вашем коде ничего криминального. Дескрипторы file_put_contents должны закрываться, т.е. в количество открытых файлов это не упирается. Попробуйте через nohup, так как у вас может рваться контекст с консолью при открытом демоне. Поток переведет /tmp/111.log в том числе и ошибки. Если и это дропнет, то значит хостинг.
Запускаю командой:
но результат тот же, 20 минут и обрывает. Тоже грешу на хостинг, но понять бы что именно, требовать от саппорта.
вы не перенаправляете вывод куда-то, в том числе и ошибки. Попробуйте то что я скинул.
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('track_errors', 1);
ini_set('html_errors', 1);
while(true){
$time = date('H-i-s');
file_put_contents(__DIR__ . '/log/time_test_log.txt', $time);
sleep(1);
}?>
/usr/bin/nohup php 111.php >/tmp/111.log 2>&1 &
Настройки PHP дефолтные? не было каких-то модулей оптимизации? По хостингу нужно чекнуть количество операций в секунду IOPS.
Чекнуть запись, какое кол-во операций? параметр IOPS
sudo apt-get install fio
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite
Чекнуть операции ввода вывода на провалы
sudo apt-get install ioping
ioping -c 1000
Получил ответ от хостинга:
"Здравствуйте, на наших серверах виртуального хостинга есть ограничение в 1200 секунд на время работы пользовательского процесса. Запущенные Вами процессы были остановлены при превышении данного лимита:" - так что таки да на их стороне была проблема.
---------- Добавлено 22.03.2020 в 21:27 ----------
вы не перенаправляете вывод куда-то, в том числе и ошибки. Попробуйте то что я скинул.
/usr/bin/nohup php 111.php >/tmp/111.log 2>&1 &
Вывод перенаправлять пробовал, но результат был тот же, + из за вывода очень сильно рос файл вывода, соответственно я хотел исключить возможные проблемы связанные с размером дискового пространства.
Настройки PHP дефолтные? не было каких-то модулей оптимизации? По хостингу нужно чекнуть количество операций в секунду IOPS.
Настройки PHP и менял и возвращал дефолтные, результат был одинаков.
Чекнуть запись, какое кол-во операций? параметр IOPS
sudo apt-get install fio
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite
Чекнуть операции ввода вывода на провалы
sudo apt-get install ioping
ioping -c 1000
А я вот не знаю сработал бы sudo apt-get install на виртуальном хостинге, наверное врядли. В любом случае спасибо, буду знать как на vps чекать если что.🚬
sitesoft, ооо нужно было сразу начинать, что у клиента хостинг (я думал vps). Вы видимо запускали через exec демона. Ясно.
sitesoft, ооо нужно было сразу начинать, что у клиента хостинг (я думал vps). Вы видимо запускали через exec демона. Ясно.
Вроде так и начинали: