Rodar script infinitamente...

279 views
Skip to first unread message

Wemerson Couto Guimarães

unread,
Dec 26, 2012, 8:16:39 PM12/26/12
to php-b...@googlegroups.com
Galera, é o seguinte... Como faço pra um script ser executado infinitamente no browser?

Já tentei forçar um:  "set_time_limit(0)" mas não adiantou... depois de alguns minutos bagunça tudo.

Estou rodando um código pra acessar um monte de urls e depois de alguns minutos, simplesmente baixa um arquivo em branco com o nome do script (sem extensão).



--
Wemerson Guimarães
Rio Verde - Go - Brasil

Eduardo Kraus

unread,
Dec 26, 2012, 8:22:02 PM12/26/12
to php-b...@googlegroups.com
Olhe os LOGS e veja o porque parou.


--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

Eduardo Alexandre

unread,
Dec 27, 2012, 5:19:10 AM12/27/12
to php-b...@googlegroups.com
Olá.
Ele talvez esteja realmente rodando sem limite de tempo de execução, mas está ocorrendo alguma excessão que o script não está tratando.

Faça como a sugestão do Eduardo e registre todas as ações.


Abraços,
____________________
Eduardo Alexandre

Wemerson Couto Guimarães

unread,
Dec 27, 2012, 5:27:59 AM12/27/12
to php-b...@googlegroups.com
Olha, no log só tem essa informação de um http 503, mas sem registro exato do que aconteceu:

127.0.0.1 - - [27/Dec/2012:08:19:40 -0200] "GET /agregator/checkFeeds HTTP/1.1" 503 265

checkFeeds é a action que busca os feeds em umas 600 fontes diferentes, provavelmente alguma demorou demais a acontecer..

Eduardo Alexandre

unread,
Dec 27, 2012, 5:53:45 AM12/27/12
to php-b...@googlegroups.com
Olá Wemerson,

Sugiro que tente tratar o retorno dos cabeçalhos HTTP.
Nesse caso, por exemplo, ele retornou:
503 Service Unavailable
The server is currently unavailable (because it is overloaded or down for maintenance).[2] Generally, this is a temporary state.

Dê uma olhada nos códigos possíveis. Creio que para todos os 5XX e alguns dos 4XX pode colocar uma condição que o script apenas desconsidere e pule para a próximo leitura.


Abraços,
____________________
Eduardo Alexandre



Em 27 de dezembro de 2012 08:27, Wemerson Couto Guimarães <wemer...@gmail.com> escreveu:
http 503

Wemerson Couto Guimarães

unread,
Dec 27, 2012, 6:04:31 AM12/27/12
to php-b...@googlegroups.com
Sim... é outra coisa com certeza, porque na minha classe que trato as requisições assincronamente eu já faço a validação nos codigos HTTP retornados... então não era pra isso acontecer...

Estou registrando um log linha a linha pra ver se encontro o problema.


--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

Eduardo Kraus

unread,
Dec 27, 2012, 6:30:51 AM12/27/12
to php-b...@googlegroups.com
Erro 503 - http://www.checkupdown.com/status/E503_pt.html

Causa:
Quando você executar estas rotinas longas e que requer muita espera do browser e sem nenhuma envio de HTML por parte do servidor, o browser pode cancelar a conexão com o servidor e o servidor interrompe o processamento e retorna um erro 503.

Solução:
Coloque este serviço para rodar na crontab do servidor. Na crontab ele pode executar quantos dias forem necessários.

Mais se você precisar que ele execute apenas quando o cliente apertar um botão:
Neste caso você pode criar uma cron de minuto em minuto que analiza se é para executar algum comando. esta validação pode ser feita por uma flag no banco ou um TXT criado no servidor.

Com TXT?
Isso. Se é para executar você cria um arquivo TXT em alguma pasta que tenha permissão de escrita e na CRON você usa o file_exists para verificar se existe o arquivo ali. Se existir executa a rotina. Antes de executar a rotina apague o arquivo, pois se não ele irá executar mais vezes.

Validar um arquivo é menos penoso ao servidor que ler o banco de dados....

Como sei quando acabou?
Ai via banco de dados poderás guardar o status do processo, ou o que esta acontecendo e via Ajax consultar o progresso.

Wemerson Couto Guimarães

unread,
Dec 27, 2012, 6:36:34 AM12/27/12
to php-b...@googlegroups.com
Valeu Eduardo... 

Algumas considerações:

O Serviço será executado na cron mesmo... por enquanto estou rodando no browser pra facilitar a visão do resultado.

No caso o 503 que está ocorrendo é é do browser com meu servidor e não com as URLS que estou acessando correto?

O Script rodou por exatos 4m, 11s e então parou... Em uma das tentativas recebi a mensagem abaixo em vez de um arquivo em branco:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>200 OK</title>
</head><body>
<h1>OK</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
</body></html>


É sobre isso que você tava referindo no 503 correto? depois de um longo tempo mesmo setando set_time_limit(0); não é 100% efetivo....

Luigi Dariva Teixeira

unread,
Dec 27, 2012, 6:57:51 AM12/27/12
to php-b...@googlegroups.com
da uma olhada na Gearman


2012/12/27 Wemerson Couto Guimarães <wemer...@gmail.com>

Eduardo Kraus

unread,
Dec 27, 2012, 7:03:43 AM12/27/12
to php-b...@googlegroups.com
No caso o 503 que está ocorrendo é é do browser com meu servidor e não com as URLS que estou acessando correto?
Correto.

Eu já tive problemas parecidos com este e a solução é a mesma... CRON...

Tenho um script de monitoramento de servidor. Além do ping de minuto em minuto que um script PHP faz, também tem um script que uma vês por dia vai em todos os servidores e baixa um pacotão de informações de tudo que aconteceu no dia (logs, quantidades de acessos e status do processador e memória). Ele começa a rodar as 3:00 da manhã e só para de rodar após as 5 da manhã.  Rodando no browser ele da erro e via CRON vai que é uma maravilha....

Wemerson Couto Guimarães

unread,
Dec 27, 2012, 7:06:31 AM12/27/12
to php-b...@googlegroups.com
Beleza...

Bem, vou fazer isso... como eu falei, a ideia é rodar na cron mesmo... mas estava testando no browser por conta de ser mais fácil ver os resultados enquanto vai debugando...

Vou também testar a rotina usando node.js só por curiosodade e comparar...

Wemerson Couto Guimarães

unread,
Dec 27, 2012, 7:10:00 AM12/27/12
to php-b...@googlegroups.com
Cara.. .que doido!!!

Deixei o script rodando e mesmo dando problema no browser, ficou rodando em segundo plano por quase 13 minutos... e finalizou... só deu pane no browser mesmo... muito loko!!!

Eduardo Kraus

unread,
Dec 27, 2012, 8:20:40 AM12/27/12
to php-b...@googlegroups.com
é....


Guilherme Medeiros

unread,
Dec 27, 2012, 6:40:01 AM12/27/12
to php-b...@googlegroups.com
provavelmente no meio da execução do teu script ele consumiu a memória máxima permitida e ai o interpretador PHP "matou" a execução dele.

Nas configurações padrões esse limite de memória é de 90MB.


Atenciosamente,

 

Guilherme Medeiros

Web Developer FTW!

www.FReNeTiC.com.br


Socialize: Blog RSS LinkedIn Twitter

Eduardo Kraus

unread,
Dec 27, 2012, 8:31:58 AM12/27/12
to php-b...@googlegroups.com
Mais ai os logs apareceria que havia ultrapassado o limite de memória...

Wemerson Couto Guimarães

unread,
Dec 27, 2012, 9:21:45 AM12/27/12
to php-b...@googlegroups.com
Isso mesmo Eduardo... até porque o script continuou rodando em segundo plano até que todas as requisições retornaram... só deu problema no browser!

Emerson Maia

unread,
Dec 27, 2012, 9:23:23 AM12/27/12
to php-b...@googlegroups.com
deixa rodando por CLI então.
Emerson Maia Rodrigues
Analista de Sistemas - Programador - Desenvolvedor - Administrador de Base de Dados

Kinn Coelho Julião

unread,
Dec 30, 2012, 12:08:43 PM12/30/12
to php-b...@googlegroups.com
Cara, da uma olhada em ob_*... Se oq vc realmente quer eh un script toda do eternamente no browser, usa as funcoea de flush do ob... Sem cron nem nda

Wemerson Couto Guimarães

unread,
Jan 1, 2013, 12:06:20 PM1/1/13
to php-b...@googlegroups.com
Opa... Kinn... estou usando ob_*... start, flush, etc... mesmo assim dá o problema!

Em 30 de dezembro de 2012 15:08, Kinn Coelho Julião <kin...@gmail.com> escreveu:
Cara, da uma olhada em ob_*... Se oq vc realmente quer eh un script toda do eternamente no browser, usa as funcoea de flush do ob... Sem cron nem nda
--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/php-brasil/-/_m3SUL2aytYJ.

Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

Reply all
Reply to author
Forward
0 new messages