我需要通过cmd运行多个脚本(5个脚本),我想确保除非并且直到第一个脚本完成第二个脚本不应该启动。因此,在第一个脚本完成后,只有第二个应该是第三个脚本,依此类推。 目前我正在使用以下代码来执行此操作
exec ("php phpscript1.php ");
exec ("php phpscript2.php ");
exec ("php phpscript3.php ");
exec ("php phpscript4.php ");
exec ("php phpscript5.php ");
我认为这些脚本是异步运行的,任何建议的人都可以同步运行这些脚本。
答案 0 :(得分:61)
PHP exec将等待被调度程序的执行完成,然后处理下一行,除非您使用&在字符串的末尾,在后台运行程序。
答案 1 :(得分:7)
如果我说得对,那你就是从php脚本中执行php脚本。
通常情况下,php在处理下一行之前等待exec ("php phpscript1.php");
的执行完成。
要避免这种情况,只需将输出重定向到/dev/null
或文件,然后在后台运行。
例如:exec ("php phpscript1.php >/dev/null 2>&1 &");
。
答案 2 :(得分:4)
查看php.net上的exec函数语法。
您将看到exec
默认情况下不会异步运行任何内容。
exec
还有另外两个参数。第三个,return_var
可以提供一个提示,如果脚本成功运行或任何异常被触发。您可以使用该变量来检查是否可以运行后续脚本。
测试它并让我们知道它是否适合您。
答案 3 :(得分:1)
在我看来,运行cronjobs会更好。它们将同步执行。如果任务是“即时”,您可以执行命令来添加此cronjob。有关cronjobs的更多信息: http://unixgeeks.org/security/newbie/unix/cron-1.html
http://service.futurequest.net/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=30
答案 4 :(得分:0)
除非你不分叉,否则exec和system都会等待脚本执行。
Check.php
<?php
echo "here ".__LINE__."\n";
exec ("php phpscript1.php");
echo "here ".__LINE__."\n";
system("php phpscript2.php");
echo "here ".__LINE__."\n";
?>
phpscript1.php
<?php
echo "=================phpscript1.php\n";
sleep(5);
?>
phpscript2.php
<?php
echo "=================phpscript2.php\n";
sleep(5);
?>
Check.php执行script1 5秒钟,然后显示下一行号,然后打印下一行执行script2。