trabalhador apache + php fastcgi, script longo [fechado]

2

Meu problema é que longos scripts php (várias horas) estão saindo cedo. (O FireFox diz que "a conexão com o servidor foi redefinida enquanto a página estava sendo carregada").

Eles saem às vezes depois de 30 minutos, às vezes após 1h45 de duração.

  • CentOS 6,6 64bit
  • Trabalhador MPM do Apache 2.2.9
  • php 5.5.20 mod_fcgid 2.3.9
  • Nenhum cache opcode instalado
  • cPanel e WHM 11.46
  • Eu tenho acesso root

Para o FastCGI incluí o seguinte no httpd.conf, via editor de inclusão WHM, para post_virtualhost:

<IfModule mod_fcgid.c>
FcgidBusyTimeout 86400
FcgidIOTimeout 86400
</IfModule>

Depois da seção IfModule eu tenho o < Caminho do diretório / para / mysite > seção (sem espaço após '<').

Eu uso set_time_limit () e ignore_user_abort () muitas vezes no script para mantê-lo em execução.

Não há nada nos registros de erros do apache.

phpinfo: link (você pode ver que set_time_limit () e ignore_user_abort () funcionam)

Funcionou bem no meu servidor antigo, que executava o mod_php: link

    
por Skacc 16.01.2015 / 16:45

2 respostas

1

Basta executar o script separado do servidor web via cron / etc.

Se você precisar executá-lo a partir do servidor web ... popen (nohup ..) e executar o script no cli ...

Meu palpite é que o servidor web / conexão do navegador atinge o tempo limite / falha e, eventualmente, a pilha TCP diz: "Acabamos aqui" e o processo do php é demolido .. Eu odiaria imaginar uma janela do navegador esperando por várias horas para um script para completar ...

Se você realmente quer fazer isso ... e o problema se torna um problema de conexão com o cliente, você pode olhar para configurar o ignore-user-abort para true no script / php.ini ...

link

    
por 16.01.2015 / 17:07
0

É possível que isso se deva a um bug no PHP 5.5? Algo como uma falha de segmentação faria com que o php saísse imediatamente - não haveria nenhum erro registrado no AFAIK.

Eu concordaria que você provavelmente deveria executá-lo a partir da linha de comando, se for um seg-fault ou similar, então tente rodar o gdb para obter um dump principal e relatar isso como um bug aqui: link

Se isso não for uma opção, tente adicionar o registro em log à tarefa para restringir o ponto em que o script é encerrado.

    
por 16.01.2015 / 18:41