Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alan H.

[Resolvido] Como interagir com um script que está rodando?

Recommended Posts

Olá pessoal!

 

Tenho o seguinte problema: no meu sistema preciso que um script fique executando durante um tempo muito longo, mas durante esse tempo preciso passar alguns outros parâmetros para esse script caso o usuário ache necessário...

 

Como o apache só roda uma requisição por vez fica difícil pensar em uma solução...

 

Alguém?

Compartilhar este post


Link para o post
Compartilhar em outros sites

já pensou em usar uma interface cliente-servidor, utilizando sockets?

 

creio que seria uma boa solução para você

 

A ideia é boa, mas não usei socket dessa vez pois preciso de uma maior interoperabilidade entre sistemas operacionais.

Alguma outra ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

para ambiente web, não consigo imaginar outra coisa.

fork, envio de sinais não tem como....

só mexi uma vez com soket em PHP, mas creio que, ao contrário de C, PHP possui alguma interface de mais alto nível para sockets, sendo possível comunicação entre SOs diferentes. Tem que ler sobre isso. Não tenho ceretza

 

 

 

O que você pretende fazer exatamente?

Quem sabe possamos dar outra soluções. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema do Socket no PHP não é na comunicação, e sim na diferença da implementação do script de acordo com o sistema operacional..

Para Unix terei que mexer até com privilégios dos usuários para que eu possa usar o socket com sucesso, e como o script é pequeno, não vale a pena no momento prolongar a dead line para fazer duas versões e mais o script de detecção de SO.

 

Bom, o programa consiste em um front end em HTML e Javascript que manda um sinal através de AJAX para o backend que entra em um loop necessariamente monstruoso. Eu consigo pegar o status do trabalho fazendo com que o Javascript leia um arquivo que é atualizado no servidor conforme o backend roda, mas não consigo mandar um sinal para o backend parar caso o usuário assim deseje.

 

Não sei se deixei claro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho outra ideia além de socket. Vamos ver se mais alguém sugere algo.

 

 

Porém, veja o que o site da Zend diz:

Although this tutorial uses Linux, the sockets library operates equally well in Windows and *nix environments.

 

In Windows, PHP Sockets can be activated by un-commenting extension=php_sockets.dll in php.ini

fonte: http://devzone.zend.com/article/1086

 

aparentemente essa distinção na implementação ocorre em C, mas não em PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

, mas não consigo mandar um sinal para o backend parar caso o usuário assim deseje.

a situação é somente "stopar" uma execução ?

 

Penso que uma forma mais simples, de acordo com o contexto que interpretei, seria por exemplo, fazer uma implementação de "STOP" dentro do script automatizado.

A idéia seria, durante a execução, o script verificar em algum local, num arquivo texto, por exemplo, se há alguma flag mandando-o interromper o processo.

 

De modo prático, exemplo:

 

script automatizado

<?php

// faz um loop infinito..
while( "loop monstruoso" ){

  // faz o chanran charanran todo etc... 

  // aqui faz a checagem se é pra interromper ou não
  // dentro do arquivo stop.txt, se for valor 1, interrompe, se for 0, continua
  $r = file_get_contents( 'stop.txt' );
  if( $r == 1 )
  {
     break; // corta a estrutura de laço e segue o script até o final
     // exit; // corta o script por completo, independentemente de existir outros scripts após o loop
  }else{
  // continua o processo em loop
  }  

}

?>

 

 

como gerenciar o 'stop.txt' ?

 

Quando o usuario solicitar para interromper, grave no arquivo 'stop.txt', o valor 1

 

Parece muito simplório.. não sei se é isso que você quer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando o usuario solicitar para interromper, grave no arquivo 'stop.txt', o valor 1

Realmente é isso que eu quero. Mas como gravar esse arquivo se o apache vai estar ocupado com a execução do backend?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa eu dei uma noobada de alto nível agora..

Mas por que será que em testes anteriores o minha requisição ficou aguardando o término do backend?

Muito estranho... Porém testei agora e funcionou...

 

Vou usar esse método mesmo, problema resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.