Como faço para encontrar e matar um loop php (processo)?

3

Eu tenho um script php que tenho desenvolvido e que chama uma API externa dentro de um loop. Está sendo testado em um VPS que está executando o LAMP no Debian. Eu notei esta manhã que a API não estava respondendo ao meu script. Quando liguei para o provedor, eles me disseram que meu servidor estava chamando a API de vezes por hora nas últimas 10 horas. Estou assumindo que um script php (no qual estive trabalhando no dia anterior e testando em meu VPS) entrou em um loop infinito durante uma das execuções, e nunca saiu (eu tenho testado a partir do prompt de comando, e Eu tentei parar e iniciar o Apache, mas a equipe de suporte da API diz que as chamadas ainda estão vindo do endereço do meu servidor. Como posso encontrar e parar o processo? Além disso, existe a possibilidade de que o Apache pare / comece a resolver o problema, mas a API ainda está tentando classificar as chamadas anteriores?

Por favor, perdoe-me por não usar o meu ambiente de teste local corretamente.

Edit: Eu não sei o nome do processo, eu preciso descobrir o nome (ou pid) baseado no comportamento.

    
por Hoytman 19.08.2014 / 22:56

2 respostas

10

Como você estava executando manualmente o binário do php, usando php ou usando o php shebang no topo do script, você precisará encontrar o PID e eliminá-lo.

Você pode usar pkill -9 php ou se o seu pkill não estiver presente você pode usar ps -efw | grep php | grep -v grep | awk '{print $2}' | xargs kill para matar todos os processos do php.

Além disso, se um processo estiver fazendo conexões de rede de saída para uma API externa, essas conexões serão exibidas em um netstat.

Você deve ser capaz de fazer um netstat -anop para mostrar todas as conexões e o PID do processo que os controla. Descobrir IP / hostname do servidor de API externo, localizar esse IP / hostname na lista netstat, matar o PID relacionado.

    
por 20.08.2014 / 20:21
1

Se eu entendi corretamente o seu Post, você correu um script do PHP-CGI através do seu console que provavelmente algo deu errado e os servidores da API de spam.

Portanto, existem muitas possibilidades que podem causar esse problema. Primeiro de tudo, quando você está executando um script PHP, basta digitar "php scriptname.php" e esperar que o script PHP termine e retorne à entrada principal da sessão. Se você fechar seu shell durante a execução do script, ele parará sua operação. A menos que você tenha iniciado seu PHP com uma "tela" ou "&" não há uma única possibilidade de o script continuar em execução.

Agora vamos analisar sua operação. Se o script entrou em um loop infinito, abrindo um soquete, isso significa que ele tentaria se conectar ao servidor da API como cem vezes por segundo. Isso significa que o servidor de destino deve banir você dos primeiros 10 segundos. Algo que você não esclareceu para nós é a taxa de fluxo das solicitações de conexão para o servidor de destino. O suporte da API forneceu mais informações sobre isso? E se sim o que eles disseram.

Tendo dito que o seu VPS continua enviando pedidos para os Servidores, sugiro que você faça

ps -A xa | grep php

e verifique se há instâncias php em execução. Você pode acidentalmente iniciar um script php em segundo plano adicionando um & até o final da linha. Se este comando retornar alguma coisa. Encontre o pid do aplicativo e termine-o com o seguinte comando

kill -9 pid

Se isso não funcionar, reinicie seus vps e pergunte se eles ainda enviam solicitações de conexão (algo que é atualmente impossível, e isso significaria que o firewall colocou seus pacotes em modo lento (o que significa que eles os enfileiraram com um atraso) para seus servidores))

    
por 19.08.2014 / 23:42