我使用PHP中的exec
函數來運行命令。我運行的命令通常需要很長時間,我不需要讀取它的輸出。是否有一種簡單的方式告訴PHP在繼續執行腳本的其餘部分之前不要等待exec
命令完成?如何在調用exec()後強制PHP腳本繼續使用腳本?
回答
// nohup_test.php:
// a very long running process
$command = 'tail -f /dev/null';
exec("nohup $command >/dev/null 2>/dev/null &"); // here we go
printf('run command: %s'.PHP_EOL, $command);
echo 'Continuing to execute the rest of this script instructions'.PHP_EOL;
for ($x=1000000;$x-->0;) {
for ($y=1000000;$y-->0;) {
//this is so long, so I can do ps auwx | grep php while it's running and see whether $command run in separate process
}
}
運行nohup_test.php:
$ php nohup_test.php
run command: tail -f /dev/null
Continuing to execute the rest of this script instructions
讓我們來看看我們的流程的PID:
$ ps auwx | grep tail
nemoden 3397 0.0 0.0 3252 636 pts/8 S+ 18:41 0:00 tail -f /dev/null
$ ps auwx | grep php
nemoden 3394 82.0 0.2 31208 6804 pts/8 R+ 18:41 0:04 php nohup_test.php
,你可以看到,PID是不同的,我的腳本,而無需等待tail -f /dev/null
運行。
這太棒了。謝謝! –
不用客氣:) – Nemoden
使用'/ dev/null'是正確工作的關鍵。由於某些原因,當我指定一個實際的日誌文件位置(即@zaf建議的'/ path/to/logfile')時,PHP仍然等待該過程完成。任何想法,爲什麼這是? –
這裏是我使用(你可以使用EXEC或系統代替paasthru):
passthru("/path/to/program args >> /path/to/logfile 2>&1 &");
謝謝!不過,我並不太熟悉這裏的一些語法。 '>>和'2>&1&'做什麼? –
>>將程序的輸出發送到日誌文件。 '2>&1'會將錯誤消息重定向到標準輸出,基本上意味着所有的輸出都會轉到日誌文件。 '&'表示在後臺運行命令。 – zaf
完美。謝謝! –
你要找的是所謂的異步調用,就像回答這裏:
Asynchronous shell exec in PHP
php execute a background process
PHP exec() as Background Process (Windows Wampserver Environment)
謝謝!在發佈之前,我對此進行了相當多的搜索,但顯然沒有使用正確的關鍵字... –
- 1. 使用exec()在調用php腳本
- 2. 腳本調用後Bash不會繼續?
- 3. PHP調用服務器腳本 - 調用後不會繼續
- 4. 在調用另一個腳本後立即繼續使父代腳本
- 5. 錯誤後繼續PHP腳本?
- 6. htaccess調用php腳本,然後繼續處理
- 7. 如何在服務器啓動後繼續使用python腳本?
- 8. 如何在重新引導後繼續使用Shell腳本?
- 9. 如何強制WebBrowser控件以繼續腳本?
- 10. 錯誤使用EXEC()調用python腳本
- 11. PHP腳本繼續如果MySQL失敗
- 12. 在php腳本上繼續cakephp 3 session
- 13. Python腳本繼續運行使用pyRserve
- 14. 如何使用shell腳本調用PHP腳本?
- 15. PHP開始PHP腳本,並繼續
- 16. 使用PHP運行Python腳本exec()
- 17. jquery ajax調用成功後,繼續運行腳本
- 18. Powershell:如何在永無止境的腳本行後繼續運行腳本?
- 19. 調用一個腳本並繼續在PHP的後臺運行它?
- 20. 使用exec在後臺運行php腳本
- 21. Javascript - 讓其他腳本執行,然後繼續腳本
- 22. 單擊PHP腳本中的鏈接並讓腳本繼續
- 23. 在另一個php腳本中使用exec()函數執行php腳本
- 24. 繼續處理LFTP後的Bash腳本
- 25. 如何從PHP exec()調用Node.js腳本時傳遞參數?
- 26. 當使用PHP的exec()調用python腳本時,「ImportError:No module named _SHA256」
- 27. PHP腳本意外不會繼續
- 28. 從腳本中調用php腳本
- 29. 從PHP腳本調用python腳本
- 30. 如何從另一個PHP腳本調用PHP腳本?
也許它是作爲一個單獨的過程嗎? – tradyblix
我該怎麼做呢?我只是將'&'追加到命令的末尾? –
'exec(「nohup $ your_command&」)' - 運行命令免於hangups,輸出到非tty('nohup'),在後臺運行('&') – Nemoden