2016-05-05 396 views
0

爲多個用戶執行cron-job自動化的最佳方式是什麼?Cron作業 - PHP腳本 - 多個用戶?

一個cron作業需要每10分鐘運行調用(通過捲曲)連接到外部API並收集數據(網站訪問者和其他數據)一個PHP腳本用戶已收到外部網絡媒體資源。我們需要每隔10分鐘通過API定期檢查一次,如果該用戶有任何新的數據可用並獲取它 - 並且在網絡應用程序中爲每個用戶提供

這樣的cron作業PHP腳本調用API通常需要1-3秒每用戶,但也有時可能需要長達30秒或更長時間才能完成一個用戶(在特殊情況下)。

問題 ...

什麼是執行這一程序,收集外部數據一樣,爲多個用戶的最佳方法是什麼? 數百甚至數千用戶?

對於每個用戶,我們需要每10分鐘檢查一次數據。

本來我打電話連續10個用戶在一個時鐘守護作業調用一個循環的思維,但由於每個用戶採集可需要30秒...... 10個用戶環路可能需要幾分鐘,並......該腳本可能會超時?正確?

您是否對如何最有效地爲許多用戶執行此過程有一些提示和建議?應該爲每個用戶使用單獨的cron作業嗎?而不是循環?

謝謝!

===編輯===

比方說,一個PHP腳本可以調用API 1分鐘內10個用戶...我可以創造10個時鐘守護作業,基本上同時調用同一個PHP腳本,但每個人收集一批不同的10個用戶?這樣我可以在一分鐘內爲100個用戶獲取數據?沒有?

它看起來是這樣的:??

在/ usr/local/bin目錄/ PHP -q get_data.php users_group = 1

在/ usr/local/bin目錄/ PHP -q get_data.php users_group = 2

在/ usr/local/bin目錄/ PHP -q get_data.php?users_group = 3

等等...

難道這是否可行呢?

===註釋===

每個用戶都有與外部API服務的唯一訪問密鑰,所以一個API調用只能是一次一個用戶。但是API可以同時接收多個同時呼叫不同的用戶。

+1

由cli(包括cron)調用的腳本沒有時間限制。也就是說,對於數千用戶,每10分鐘30秒顯然不會工作 –

+0

假設我有10個獨立的cron作業幾乎同時調用同一個php腳本......這是否會起作用?事情是,每個用戶每次API調用大多數時間需要1-3秒。只有極少數情況下可能需要10秒鐘(我經歷過的最多時間),而我只需30秒就可以確保...如果API提供商的服務器被卡住或者如此... ... – user1033406

+0

便宜的多線程 - 我做這但將進程數量限制爲內核數量。之後,他們所做的一切都提示並且你沒有任何好處 –

回答

2

如果需要30秒的用戶,並有超過20個用戶,你需要再次啓動前,您將無法完成。我會考慮使用GearMan或其他作業服務器以異步方式處理這些請求中的每一個。 GearMan也可以等待作業完成,所以你應該能夠遍歷所有你需要做的請求,然後等待它們完成。你可以用PHP的pthread實現來完成同樣的事情,但是,這將會變得更加困難。

+0

謝謝你的這些建議。有趣。是的,API調用很少會花費2-3秒以上。我經歷過的高峯大概是10秒,因爲他們身邊還有另一個循環,他們的服務器有時會被卡住。我想確保......這就是「長達30秒」的原因。我已經有了一個PHP腳本,它將所有用戶及其所有任務排成一排,以便一次執行很少的任務。再次感謝提示。我會研究它。 – user1033406