2012-02-05 43 views
0

與crontab執行後臺任務的方式相比,在php上編寫一個守護進程(它監聽/處理隊列)是否如此耗費內存?Memcacheq vs cronjob在內存消耗方面

我在一臺服務器下有一個〜600個商店。有些任務店主運行需要很多時間,所以分叉它們是合理的。把任務放到cron中效果很好,我只是不喜歡延遲59秒(限制cron)。所以我想嘗試隊列系統。我只是害怕它會迫使我運行600個PHP線程來監聽/處理這些隊列(商店來自不同的客戶,我無法制作一個通用的守護進程)。它不會自動需要大約600-1000MB的內存,與cron相比,它不是一個好的選擇(只有在計劃時才加載進程)。

回答

1

爲什麼不使用「at」守護進程運行它們,而不是將它們放入延遲59秒的cron中?你可以簡單地使用「現在」,他們會立即運行。見,例如,:

http://unixhelp.ed.ac.uk/CGI/man-cgi?at

我肯定不會考慮在PHP同時運行600個線程的守護程序。

+0

感謝你們讓我清醒:)好吧,「at」對我來說是新東西,而我曾經使用過「nohup」。在這種情況下,「nohup」有什麼不同?因爲exec(「nohup php mytask.php」)看起來比exec更簡單(「echo'php mytask.php'| at now」); – 2012-02-05 19:50:42

+0

nohup表示當用戶運行註銷時,該進程不會被終止;它本身並不足以解決你的問題,但如果你添加一個&符號(使nohup任務在後臺運行),它可能會工作。所以這會讓你'exec(「nohup php mytask.php&」) 另請參閱:http://en.wikipedia.org/wiki/Nohup – Daan 2012-02-05 20:16:47

+0

謝謝大安,我忘了添加&,是那些命令現在相當於? – 2012-02-06 06:49:41

1

我之前構建的隊列運行器運行多達75-100個獨立的PHP進程,使用supervisor開始儘可能多的我想要的。由於它們共享如此多的通用代碼,因此它們也由操作系統共享,而不是重複的。

運行幾十個甚至更多,可能爲某些類型的高優先級隊列用於小型快速作業和一部分可以快速運行大型慢速作業的工作人員。

我寫過關於這個問題的文章my tech blog, phpscaling.com