[英]Php Exec timeout
我有以下exec()
命令,結尾帶有&
符號,因此腳本在后台運行。 但是,該腳本未在后台運行。 恰好在5.6分鍾后,它在瀏覽器中超時。 另外,如果我關閉瀏覽器,腳本將無法繼續運行。
exec("/usr/local/bin/php -q /home/user/somefile.php &")
如果我通過命令行運行腳本,它不會超時。 我的問題是如何防止超時。 我如何使用exec在后台運行腳本,所以它不依賴於瀏覽器。 我在做什么錯了,應該怎么看。
exec()
函數處理已執行程序的輸出,因此建議您將輸出重定向到/dev/null
(虛擬可寫文件,該文件會自動丟失所有寫入的數據)。
嘗試運行:
exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &");
注意: 2>&1
將錯誤輸出重定向到標准輸出,而> /dev/null
將標准輸出重定向到該虛擬文件。
如果仍然有困難,可以創建一個僅執行其他腳本的腳本。 exec()
在執行任務時遵循流程,但是在任務完成時釋放。 如果執行的腳本僅執行另一個腳本,則任務非常快速,並且exec的釋放方式相同。
讓我們來看一個實現。 創建一個包含以下內容的exec.php
:
<?php
if (count($argv) == 1)
{
die('You must give a script to exec...');
}
array_shift($argv);
$cmd = '/usr/local/bin/php -q';
foreach ($argv as $arg)
{
$cmd .= " " . escapeshellarg($arg);
}
exec("{$cmd} > /dev/null 2>&1 &");
?>
現在,運行以下命令:
exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php > /dev/null 2>&1 &");
如果有參數,也可以給它們:
exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php x y z > /dev/null 2>&1 &");
您將需要使用shell_exec()
代替:
shell_exec("/usr/local/bin/php -q /home/gooffers/somefile.php &");
話雖如此,如果您具有外殼訪問權限,為什么不將其安裝為cronjob? 我不確定為什么PHP腳本會調用另一個腳本來像這樣運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.