Как я могу найти и убить цикл php (процесс)?

У меня есть php-скрипт, который я разрабатывал, который вызывает внешний api в цикле. Он тестируется на VPS, который работает под управлением LAMP на Debian. Сегодня утром я заметил, что api не отвечает на мой сценарий. Когда я позвонил поставщику, они сказали мне, что мой сервер звонил api 1000 раз в час в течение последних 10 часов. Я предполагаю, что php-скрипт (над которым я работал накануне и тестировал на своем VPS) вошел в бесконечный цикл во время одного из исполнений так и не вышел (я тестировал его из командной строки, а не через интернет.) Я попытался остановить и запустить Apache, но сотрудники службы поддержки api говорят, что вызовы все еще поступают с моего адреса сервера. Как я могу найти и остановить процесс? Кроме того, есть ли вероятность, что Apache stop/start решил проблему, но api все еще пытается отсортировать прошлые вызовы?

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

Edit: я не знаю имя процесса, мне нужно открыть имя (или pid) на основе поведения.

5
задан Hoytman
источник

2 ответов

Так как вы вручную запускали PHP binary, либо используя php, либо используя php shebang в верхней части скрипта, вам нужно найти его PID и убить его.

можно использовать pkill -9 php или если pkill itsn't присутствует, вы можете использовать ps -efw | grep php | grep -v grep | awk '{print }' | xargs kill убить все php процессы.

кроме того, если процесс выполняет исходящие сетевые подключения к внешнему API, эти подключения будут отображаться в netstat.

вы должны быть в состоянии сделать netstat -anop чтобы показать вам все соединения и PID процесса, который их контролирует. Узнайте IP / имя хоста внешнего сервера API, найдите этот IP / имя хоста в списке netstat, убейте связанный PID.

10
отвечен ssnobody 2014-08-20 18:21:40
источник

Если я правильно понял ваш пост, вы запустили скрипт из PHP-CGI через вашу консоль, что, вероятно, что-то пошло не так и спам серверов API.

Так что есть много возможностей, которые могут вызвать эту проблему. Прежде всего, при выполнении PHP скрипта просто купите набрав " php scriptname.php " он ждет завершения PHP-скрипта, а затем возвращается к вашему основному входу сеанса. Если закрыть оболочку во время выполнения скрипта, она остановит свою работу. Если вы не начали свой PHP с "экрана" или"&", нет ни одной возможности для продолжения работы скрипта.

теперь проанализируем его работу. Если скрипт зашел в бесконечный цикл , открывая сокет, это значит, что он будет пытаться подключиться к серверу API сотню раз в секунду. Это означает, что целевой сервер должен заблокировать вас в первые 10 секунд. То, что вы не разъяснили нам, - это скорость запросов на подключение к целевому серверу. Предоставляет ли вам поддержка API дополнительную информацию об этом? И если да, то что они говорили.

сказав, что ваш VPS все еще отправляет запросы на серверы, я бы предложил вам сделать

ps-a xa | grep php

и проверьте наличие запущенных экземпляров php. Вы можете случайно запустить php скрипт в фоновом режиме, добавив & в конец строки. Если эта команда возвращает что-то. Найдите pid приложения и завершите его с помощью следуя команде

kill -9 pid

Если это не работает , перезагрузите vps и спросите их, по-прежнему ли он отправляет им запросы на подключение (что-то, что в настоящее время невозможно, и это означало бы, что их брандмауэр поместил ваши пакеты в медленный режим (это означает, что он поставил их в очередь с задержкой на их серверы))

1
отвечен Devian 2014-08-19 21:51:53
источник

Другие вопросы apache-http-server api command-line php process