在單獨的進程中運行Symfony任務的正確方法是什麼?我的第一個猜測是使用fork/exec,但根據this,你不能用任何保持打開的文件描述符或連接(如MySQL)的東西來做。所以這聽起來不像是一種選擇。另一種選擇是做exec('symfony taskname &')
,但這似乎是一個黑客攻擊。這是我能做的最好的嗎?有第三種方法嗎?如何在操作的背景中正確運行Symfony任務?
5
A
回答
3
以下是我最後做它:
exec('nohup ' . sfConfig::get('sf_root_dir') . '/symfony TASKNAME >/dev/null &');
你必須將stdout,否則它不會在後臺運行(儘管你不必使用/ dev/null的,如果你想要實際的輸出)。在我的情況下,我將所有的任務設置爲使用Symfony的文件記錄器,所以這不是問題。
我仍然在尋找更好的解決方案。這看起來像一個黑客。
-8
Php不知道多線程。
是的,這是PHP IMO的一個很大的缺陷。
有一種方法可以執行多線程,但不推薦使用。它很複雜,而且它很難看,它不問問題。
所以,我認爲你能做的最好的事情就像是exec,或者像打電話一樣的web服務的maby somthing?
4
通常處理的方式是使用任務隊列。當你想做一個後臺進程時,將它添加到某種類型的隊列中(你可以使用你的數據庫,或者你可以使用像beanstalkd這樣的實際隊列守護進程)。然後你有一些守護程序,它們的工作是將工作從隊列中拉出來並執行。
相關問題
- 1. 如何在操作的背景中正確運行Symfony任務?
- 2. Symfony的過程 - 背景任務
- 3. 服務未正常運行背景
- 4. 在Django中執行背景任務
- 5. 如何在一個gulp任務中運行多個操作?
- 6. 如何正確排列任務以在C中運行#
- 7. 如何在創建組件時正確添加任務/操作
- 8. 我如何做背景任務,每天早上運行一次?
- 9. 如何確保Celery任務以正確的設置運行?
- 10. 如何在Mac背景中運行Pygame
- 11. 在較低的CPU優先級的背景下運行任務
- 12. 在Jframe的背景操作
- 13. 如何在CSS背景中正確製作SVG雪碧圖塊?
- 14. 耙搭建運行在不正確的背景下
- 15. 如何在gradle中運行任務後運行集成任務?
- 16. 如何正確運行多個異步任務並行?
- 17. Resque工作,如何停止正在運行的任務
- 18. 背景SQLite任務
- 19. 操作欄背景
- 20. 如何確保線程任務運行
- 21. 背景模式與背景任務
- 22. 背景當應用程序運行時的操作
- 23. 如何在C中停止/銷燬正在運行的操作#
- 24. 如何確定在Apache Storm中節點上運行的任務
- 25. 如何正確插入背景圖片
- 26. 如何製作可以在背景上運行的計時器?
- 27. 如何正確運行後臺服務?
- 28. 使用Quartz調度程序運行背景任務
- 29. 如何在ant中運行dbunit任務?
- 30. 如何確保在任務中循環至少運行一次
pcntl_fork函數只適用於cgi版本的php。如果你通過apache運行php,這是不行的。使用exec幾乎是使用apache完成它的唯一方法,但它絕對是醜陋的,並且必須靜靜地運行以便同時執行。 – Jestep 2010-12-22 14:45:39
我花了很長時間才發現你必須將stdout重定向到一個文件才能真正運行。那是你「靜靜地運行」的意思嗎? – 2010-12-23 19:50:24