500 erro interno do servidor php processo de longa execução

3

Estou tentando executar um processo php longo e ele termina com o erro de 500 servidores internos. Ele executa bem por cerca de 8 minutos. Eu reiniciei a máquina depois de alterar as configurações do php.

Configuração do PHP:

max_execution_time: 3600

Após cerca de 10 minutos ps ax | grep php:

19007 ? S 0:08 /usr/bin/php /home/gypsy/public_html/index.php

Eu configurei o ignore_user_abort true.

O processo fica preso às 00:08 (8 minutos) e não é executado mais.

O log de erros do Apache mostra o erro:

Script timed out before returning headers: index.php

Parece que o max_execution_time não está funcionando. Qualquer sugestão seria uma grande ajuda.

Atualização:

Eu consegui detectar o problema. É o firewall que estava bloqueando o processo. o servidor está usando o iptables com configserver como firewall. Desativar o firewall funciona bem. Mas não tenho certeza quais configurações serão alteradas para permitir o processo de longa execução no firewall

    
por Sabirul Mostofa 29.03.2012 / 07:11

3 respostas

1

Sempre que eu vejo "headers" -errors eu verifico se

  1. Existe algum buffer de saída ativo
  2. Já existem cabeçalhos gerados

Antes de qualquer local de possível falha e / ou encaminhamento no código pode ocorrer. O último recurso, às vezes, é percorrer os estágios do script assim:

var_dump($runtimeStuffInfo);die('argh!');

e reduza o código de área onde os problemas começam a ocorrer. Você não está dizendo o que seu "script de 8 minutos" está tentando fazer, mas pela minha experiência, a abordagem mais estável seria manter o CLI para esse tipo de coisa:

Idealmente, é possível fazer logon no seu servidor via SSH e executar o script a partir da linha de comando (preferencialmente via nohup, para que você não precise se preocupar se a conexão for interrompida) - dessa forma você também sempre veria onde o seu script para (no caso ainda seria), como você pode registrar cada bit imediatamente, como é ecoado para o console.

Se você não possui permissões para fazer login via SSH, ainda pode tentar exec ('nohup php long_running_job.php > /some/writable/directory/with766/your_job.log') acionar seu trabalho em uma página PHP (por exemplo, link ) e, em seguida, você analisa a saída do seu cronjob de your_job.log em outra página de script (por exemplo, link ) .

No caso de todos os itens acima não chegarem lá, eu termino o trabalho em pequenos pedaços de trabalho que terminarão bem antes que o problema de timeout possa ocorrer, e então chame-os um após o outro. .

    
por 03.05.2012 / 22:05
0

Que tal set_time_limit (3600);

No começo do seu roteiro? Isso funcionaria?

    
por 29.03.2012 / 14:26
0

é FCGI o manipulador do apache? Se for, então você tem que definir o FcgidIOTimeout e FcgidBusyTimeout para um valor muito maior. Você pode colocar essas diretivas no arquivo de configuração do apache (ou, em alguns casos, no fcgi.conf ou php.conf) após o carregamento do módulo fcgi. Você pode encontrar mais informações na documentação do apache fcgi link

    
por 17.07.2015 / 13:54