簡體   English   中英

如何在 PHP 中同步執行 shell 命令

[英]How to execute shell commands synchronously in PHP

我需要通過 cmd 運行多個腳本(5 個腳本),我想確保除非第一個腳本完成,否則第二個腳本不應該啟動。 因此,在第一個腳本完成后,只有第二個應該是第三個,依此類推。目前我正在使用以下代碼來執行此操作

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

我認為這些腳本是異步運行的,任何建議都可以讓這些腳本同步運行。

PHP exec會等到被調用程序的執行完成,然后才處理下一行,除非你在字符串的末尾使用 & 在后台運行程序。

如果我說得對,您就是在 php 腳本中執行 php 腳本。

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

為避免這種情況,只需將輸出重定向到/dev/null或文件並在后台運行。

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

查看 php.net 上的exec函數語法。 您將看到exec默認情況下不會異步運行任何東西。

exec還有兩個其他參數。 第三個, return_var可以給你一個提示,如果腳本運行成功或任何異常被觸發。 您可以使用該變量來檢查是否可以運行后續腳本。

測試它並告訴我們它是否適合您。

在我看來,運行 cronjobs 會更好。 它們將同步執行。 如果任務是“on-the-fly”,你可以執行命令來添加這個cronjob。 有關 cronjobs 的更多信息: http ://unixgeeks.org/security/newbie/unix/cron-1.html

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

除非你不 fork,否則 exec 和 system 都會等待腳本執行。

檢查.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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM