entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Ejecutar tarea en segundo plano en PHP

Buenos días
Necesito ejecutar un proceso en segundo plano, encontre el siguiente código:

public static function runInBackground ($cmd) 
{
      if (substr(php_uname(), 0, 7) == "Windows")
      {
              pclose(popen("start /B ". $cmd, "r"));
      } 
      else 
     {
               exec($cmd . " > /dev/null &");
     }
}

Funciono muy bien la primer vez, cuando lo ejecuto por segunda vez no funciona, por lo que tengo que detener el servicio del apache y volverlo a ejecutar, aún cuando el proceso a finalizado.

Que podría hacer para que se puede ejecutar mas de una vez?

Les agradeceria mucho la ayuda que me puedan dar

0voto

Leonardo-Tadei comentado

Qué programa estás ejecutando? En qué Sistema Operativo?

0voto

ferunando comentado

  • Lo que ejecuta es un .bat
  • Sistema Opertivo Windows

4 Respuestas

1voto

ferunando Puntos310

Muchas gracias a los que respondieron.
Pude resolver el problema, no sé si hice muchas cosas pero me funciono.
Solución:
1 - Crer un archivo con extensión vbs de la siguiente forma

Set Variable = CreateObject("WScript.Shell")
Set objParametros = WScript.Arguments 

Parametro_01 = objParametros.Item(0)
Parametro_02 = objParametros.Item(1)

Variable.Run  "" & Parametro_01 & Parametro_02 & "", 0
set Variable = Nothing

2 - Desde PHP

<?php       
   $Archivo = 'C:\\Prueba_002.vbs ';
   $Parametros = 'C:\bat\Copia_Dos.bat ';
   $Parametros2 = '"'.'Parametro1 Parametro2'.'"';
   $Archivo = $Archivo.$Parametros.$Parametros2;
      exec($Archivo);   
?>

0voto

Peter comentado

Por favor seleccionala como respuesta correcta. :)

0voto

Leonardo-Tadei comentado

Entonces sí era un tema de diferencias de variables de entorno y contextos, porque si Apache no termina y el .vbs sí, ejecuntando el mismo BAT debe ser por eso.

Tu workarround es muy bueno, pero todavía no sabemos la causa del problema:-(

Saludos!

0voto

egoitz_gonzalez Puntos10050

Hola.

No estoy muy puesto en el tema sobr eel sistema Windows la verdad. Pero, creo que este enlace te puede servir. http://gurualx.wordpress.com/2011/11/21/cron-linux-y-windows/

Saludos.

1voto

Leonardo-Tadei Puntos227320

Hola,

por tu descripción del problema y por el SO que usás, lo que debe estar pasando es que el BAT no termina de ejecutarse, por ejemplo por esperar alguna interacción de usuario, y por tanto el thead no termina hasta que no relanzás Apache, que es quién lo invoca.

Puede no ser trivial de depurar, porque si el BAT funciona y termina cuando lo ejecutás en una terminal, podría no hacerlo cuando lo ejecuta Apache, porque las variables de entorno y el directorio por default serán distintos.

Fijata que el BAT termine cuando es ejecutado, por ejemplio agregando en la última línea que escriba algo (la fecha por ejemplo) en un archivo TXT, así podés revisar que llegue al final. Si no llega, andá subiendo la salida al archivo hasta encontrar en dónde se está deteniendo.

Si podés, copiá y pegá el BAT acá o en PasteBin y pasá la dirección, a ver si vemos algo obvio que haga que no termine la ejecución.

Saludos!

0voto

ferunando Puntos310

Es correcto aun no se ha encontrado la causa, tengo poco de haber entrado con PHP, espero algún día determinar y solucionar este detalle, por ahora, se queda así, ya que urge el cambio

0voto

Leonardo-Tadei comentado

Totalmente de acuerdo: si no hay tiempo, lo prioritario es que funcione.

Igual no hay que ir acumulando deuda tecnológica, porque a mediano plazo, se la paga.

PD: por favor, convertí esta respuesta tuya en comnetario (así no aparece una respuesta que no lo es) y marcá tu propia solución como "la mejor" (así el tema queda cerrado).

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta