在apcahe服務器中,我想運行一個PHP腳本作爲cron,它在後臺啓動一個php文件並在文件開始後退出,並且不會等待腳本完成,因爲該腳本將執行大約60分鐘才能完成。這可以做到嗎?PHP中的多線程
PHP中的多線程
回答
您需要使用「&」符號作爲後臺進程運行程序。
$ php -f file.php &
那就是在後臺運行這個命令。
您可能賴特sh腳本
#!/bin/bash
php -f file.php &
而且從crontab中運行此腳本。
Cron已經在後臺運行。沒有必要這樣做。 – zysoft
你應該知道PHP中沒有線程。 但是如果你在Unix/linux系統上運行,你可以執行程序並輕鬆地將它們分開。
$command = "/usr/bin/php '/path/to/your/php/to/execute.php'";
exec("{$command} > /dev/null 2>&1 & echo -n \$!");
可以做這項工作。讓我們來解釋一下:
exec($command);
執行的/ usr/bin中/ PHP的「/path/to/your/php/to/execute.php」:你的腳本啓動,但Apache將等待執行結束前執行下一個代碼。
> /dev/null
會將標準輸出(即回顯,打印等)重定向到一個虛擬文件(其中寫入的所有輸出都會丟失)。
2>&1
會將錯誤輸出重定向到標準輸出,寫入相同的虛擬文件和不存在的文件。例如,這可以避免登錄到您的apache2/error.log。
&
是在你的情況下,最重要的事情:它會脫離您的$命令的執行:所以EXEC()會立刻釋放你的PHP代碼執行。
echo -n \$!
會給PID你超脫執行作爲迴應:將通過執行exec()返回,使你能夠與它的工作(比如,把這個PID到數據庫中,並經過一段時間後殺死它避免殭屍)。
很好的解釋。 –
這可能不是針對您的特定問題的最佳解決方案。但爲了記錄,PHP中有線程。
https://github.com/krakjoe/pthreads
我假設你知道如何使用線程,這是非常年輕的代碼,我寫我自己,但如果你有一個線程和互斥和經驗等等,你應該能夠解決你的問題使用這個擴展名。
這顯然是我自己的項目的無恥插件,如果用戶沒有安裝擴展所需的訪問權限,那麼它不會幫助他,但很多人找到stackoverflow,它將毫無疑問地解決其他問題...
- 1. PHP中的多線程
- 2. PHP中的多線程
- 3. 多線程PHP與多線程Python
- 4. php多線程,mysql
- 5. 多線程在PHP
- 6. 多線程在PHP
- 7. php libevent是多線程的?
- 8. PHP中的多線程圖像轉換
- 9. 異步和PHP中的多線程
- 10. PHP中的多線程選項
- 11. PHP 7中的多線程問題
- 12. java中有多線程的多線程
- 13. PHP中的線程
- 14. 多線程可能在PHP?
- 15. PHP線程做多件事
- 16. 多線程方法php
- 17. php多線程問題
- 18. 用Drupal 7在php中多線程
- 19. 在PHP中實現多線程
- 20. 如何在php中使用多線程
- 21. 多類中的多線程
- 22. PHP多捲曲或多線程
- 23. 多線程 - 類中的異步線程
- 24. 單線程中的多線程
- 25. 的PHP接口是多線程
- 26. 針對PHP的多線程ajax調用
- 27. 如何使用多線程的php curl?
- 28. laravel中的多線程或多處理php
- 29. 關於多線程的java多線程
- 30. Java多線程程序:多線程中的對象共享
爲什麼你需要Apache? – nkr
每分鐘只需在cron上運行腳本。您可以在文件上創建一些「互斥體」的模擬,並檢查前一個實例是否完成。Apache與你的任務無關。 – zysoft
爲什麼你不能「運行」cron?它是一個cron工作 - 所以你不需要等待它完成? – Laurence