簡體   English   中英

php-如何在后台執行多個bash命令

[英]php - How to exec in background multiple bash command

我正在嘗試使用exec函數在后台運行兩個bash命令。

 $action[] = "/path/script1 par1 > log1 2>&1";
 ...
 $action[] = "/path/script2 par2 > log2 2>&1";
 ...
 $cmd = "( " .implode(' && ',$action). " ) &";
 exec($cmd);

script1script2是bash腳本。

腳本已正確執行,其輸出已正確保存在日志文件中,但是我的應用程序掛起了。 看來,去年不工作。

我已經嘗試過:

 $cmd = "bash -c \"" .implode(' && ',$action). "\" &";

如果我運行一個命令,它將在后台運行。

我捕獲了$ cmd ,如果運行:

 ( /path/script1 par1 > log1 2>&1 && /path/script2 par2 > log2 2>&1 ) &

從命令行,它在后台工作。

我在Red Hat Enterprise Linux AS版本3(Taroon Update 2)上使用Apache / 2.0.52和PHP / 5.2.0

答案隱藏在PHP exec文檔中

如果使用此功能啟動程序,則要使其在后台繼續運行,必須將程序的輸出重定向到文件或其他輸出流。 否則,PHP會掛起,直到程序執行結束。

將重定向添加到命令行的頂層:

exec( "bash -c \"( ./script1 par1 > log1 2>&1 && ./script2 par2 > log2 2>&1 ) \" >/dev/null 2>&1 & " );

並且沒有bash -c

exec( "( ./script1 par1 > log1 2>&1 && ./script2 par2 > log2 2>&1 ) >/dev/null 2>&1 & " );

使用PHP 5.3.3-7(命令行調用)進行了測試:程序在添加重定向運算符之前掛起,然后終止。

暫無
暫無

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

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