Verifique se o script PHP está sendo executado e, se não for executado,

0

Estou executando um arquivo PHP usando

nohup php server.php &

Isso escuta uma porta específica e faz ações de acordo com a entrada.

O problema é que às vezes o script é interrompido. Eu não posso usar um cron job para consertar isso, porque meu servidor está escutando uma porta o tempo todo e também está criando processos filhos.

Existe uma maneira de verificar se server.php está em execução e (se não) iniciá-lo?

    
por user1842264 30.06.2015 / 14:23

3 respostas

1

Você pode verificar o processo usando ps , mas uma desvantagem é que, se você tiver várias instâncias desse processo em execução ou se o script estiver desativado, esse método poderá ser menos conclusivo.

Eu prefiro realmente verificar se o servidor está escutando na porta. Aqui estão algumas maneiras de fazer isso. Se o seu servidor estiver escutando na porta 2000, por exemplo, considere o seguinte.

Usando lsof

lsof -i :2000; echo $?;

lsof está verificando se há descritores de arquivos abertos e deve mostrar se um programa está escutando ou se comunicando ativamente nessa porta. Isso irá ecoar um 0 se o servidor estiver aceitando conexões na porta 2000 ou um 1 se não estiver.

Usando nc

nc -z -w1 192.168.1.12 2000 &> /dev/null; echo $?;

Este é o meu método preferido para verificar em um servidor de soquete. Aqui nc está usando o sinalizador -z para o modo de E / S zero para varrer rapidamente a porta. Você pode usar seu endereço IP aqui e a porta correta. Se o servidor está aceitando conexões, então a vida é boa.

Novamente, os valores de retorno serão 0 para bom ou 1 para não bons. Estamos descartando qualquer saída aqui porque estamos querendo apenas um cheque booleano rápido. Este método retorna muito rápido se o endereço da rede estiver acessível. Executar a partir do próprio servidor, você não verá quase nenhuma latência, pois está tentando falar consigo mesmo.

Automatizando

Para executar esses testes pelo cron, crie um script bash e execute um ou ambos os comandos e execute uma série de verificações lógicas. Se eles falharem, reinicie seu script e verifique novamente. Eu tenho usado esses métodos há vários anos e tenho tido resultados muito bons de tempo de atividade.

    
por 30.06.2015 / 15:08
0

Um pouco atrasado para a festa ...

Usando o daemon restartd você pode executar programas e scripts de bash. O Restartd irá verificar a cada 20 segundos (configurável) se os programas em sua lista estiverem em execução.

Veja a página de manual aqui

    
por 14.01.2017 / 23:03
0

não tenho certeza se isso resolve seu problema XY

if ps -C php -o args h | grep -q server.php
then true ## php server.php running
else php server.php ## not running
fi

ps

  • -C php pesquisará por instância do php,
  • -o args exibirá a linha de comando completa,
  • h sem cabeçalho

grep

  • -q fica quieto

Isto irá verificar se php server.php está em execução, se programm is stop process estará aqui e não haverá reinicialização.

A solução real inclui polling server.php usando qualquer conexão, esperando uma resposta conhecida sem timeout. se falhar o relançamento.

    
por 30.06.2015 / 14:52