2011-10-01 200 views
18

Necesito ejecutar varios scripts (5 scripts) a través de cmd, quiero asegurarme de que a menos y hasta que el primer script termine el segundo no se inicie. Por lo tanto después de la primera secuencia de comandos completa a continuación, sólo en segundo lugar debe ser entonces una tercera y así sucesivamente .. Actualmente estoy usando el siguiente código para hacer estoCómo ejecutar comandos de shell de forma síncrona en PHP

exec ("php phpscript1.php "); 
exec ("php phpscript2.php "); 
exec ("php phpscript3.php "); 
exec ("php phpscript4.php "); 
exec ("php phpscript5.php "); 

Creo que estas secuencias de comandos se ejecutan de forma asíncrona, los chicos de sugerencias para que estas secuencias de comandos se puede ejecutar sincrónicamente

+1

Cuando se dice 'a través de cmd', quiere usted decir con el símbolo del sistema de Windows, o está usando un shell como bash, sh, zsh etc? – Michael

+0

Estoy bastante seguro de que no se están ejecutando * asíncronamente * por el momento, por el contrario. Corren uno después del otro, que se llama "sincrónico". –

+0

no en Windows usando shell – Rahul

Respuesta

50

PHP exec esperará hasta que finalice la ejecución del programa llamado, antes de procesar la siguiente línea, a menos que use & al final de la cadena para ejecutar el programa en segundo plano.

+1

Me salvaste de hacer un experimento innecesario, y te saludo. –

+0

@stivlo: lo mismo aquí, gracias hermano. Solo quiero preguntar qué pasa si el comando se ejecuta desde un cliente diferente, p. Ej. Quiero detener al ejecutivo hasta que termine el primero, si se dispara desde la PC de 2 clientes simultáneamente (mi ejecutivo ejecuta otro programa de hardware que no admite la ejecución en paralelo) – mokNathal

7

Si te estoy haciendo bien, estás ejecutando scripts php desde dentro de un script php.

Normalmente, php espera la ejecución del exec ("php phpscript1.php"); para finalizar antes de procesar la siguiente línea.

Para evitar esto, simplemente redirija la salida a /dev/null o un archivo y ejecútelo en segundo plano.

Por ejemplo: exec ("php phpscript1.php >/dev/null 2>&1 &");.

+1

@ Bill'o: su edición no es válida. Su código pasa '/ dev/null' como un argumento para el script PHP, pero no realiza la redirección. – Dennis

+0

de hecho mi error, tecleé demasiado rápido –

4

Compruebe la sintaxis de la función exec en php.net. Verá que exec no ejecuta nada de forma asíncrona de forma predeterminada.

exec tiene otros dos parámetros. El tercero, return_var puede darle una pista si la secuencia de comandos se ejecutó correctamente o se disparó cualquier excepción. Puede usar esa variable para verificar si puede ejecutar las secuencias de comandos sucesivas.

Pruébalo y haznos saber si te funciona.

Cuestiones relacionadas