如何在PHP中同步执行shell命令如何在PHP中同步执行shell命令(How to execut

2019-05-12 07:33发布

我需要运行CMD通过多个脚本(5个脚本),我要确保,除非和直到第一个脚本结束第二不应该启动。 因此,后则第一个脚本完成第二只应是那么第三个等。目前我使用下面的代码来做到这一点

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

我认为,这些脚本异步运行,任何建议的家伙,使这些脚本可以同步运行。

Answer 1:

PHP 的exec会等到调用程序的执行完毕,处理下一行之前,除非您使用与在字符串的结束在后台运行程序。



Answer 2:

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

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

为了避免这种情况,只需将输出重定向到/dev/null或文件,并在后台运行。

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



Answer 3:

退房EXEC上php.net函数的语法。 你会看到, exec默认情况下不异步运行任何东西。

exec有另外两个参数。 第三个, return_var可以给你一个暗示,如果脚本成功运行,或任何异常被解雇了。 您可以使用该变量来检查,如果你能运行随后的脚本。

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



Answer 4:

In my opinion, it would be better to run cronjobs. They will execute synchronously. If the task is "on-the-fly", you could execute the command to add this cronjob. More information about cronjobs: http://unixgeeks.org/security/newbie/unix/cron-1.html

http://service.futurequest.net/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=30



Answer 5:

无论Exec和系统等待的脚本来执行,除非你不分叉。

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。



文章来源: How to execute shell commands synchronously in PHP
标签: php shell