2011-10-01 68 views
18

我需要通过cmd运行多个脚本(5个脚本),我想确保除非第一个脚本完成第二个脚本,否则不应启动。因此,后则第一个脚本完成第二只应是那么第三个等.. 目前我使用下面的代码来做到这一点如何在PHP中同步执行shell命令

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

我觉得这些脚本异步运行,任何建议家伙让这些脚本可以同步运行。

+1

当你说 '通过CMD',你的意思使用Windows命令提示符下,或者是你使用的shell,比如bash中,SH,zsh的,等等? – Michael

+0

我相当肯定,他们现在不是异步运行*,相反。他们一个接一个地运行,这叫做“同步”。 –

+0

不在使用shell的窗口 – Rahul

回答

50

PHP exec将在处理下一行之前等待被调用程序的执行完成,除非在字符串末尾使用&以在后台运行程序。

+1

你让我免于做不必要的实验,我向你致敬。 –

+0

@stivlo:同样在这里,感谢bro.Just想问一下,如果命令是从不同的客户端执行的,例如我想在第一个完成之前停止执行,如果它是从2个客户端PC同时触发的(我的exec执行一些不支持并行执行的其他硬件程序) – mokNathal

7

如果我得到你的权利,你是从一个PHP脚本内执行PHP脚本。

通常,php会在处理下一行之前等待exec ("php phpscript1.php");的执行完成。

要避免这种情况,只需将输出重定向到/dev/null或文件并在后台运行。例如:exec ("php phpscript1.php >/dev/null 2>&1 &");

+1

@ Bill'o:您的修改无效。您的代码将'/ dev/null'作为参数传递给PHP脚本,但它不执行重定向。 – Dennis

+0

确实是我的错误,我输入得太快 –

4

查看php.net上的exec函数语法。 默认情况下,您会看到exec不会异步运行任何操作。

exec有两个其他参数。第三个,return_var可以给你一个提示,如果脚本成功运行或任何异常被解雇。您可以使用该变量来检查是否可以运行后续脚本。

测试它,让我们知道它是否适合你。