2013-06-04 44 views
0

這裏cron作業就是我試圖在高級別僞代碼來實現:獲取從數據庫動態名稱的列表並遍歷數組(PHP)

query db for a list of names (~100) 
for each name (using php) { 
    query a 3rd party site for xml based on the name 
    parse/trim the data received 
    update my db with this data 
    Wait 15 seconds (the 3rd party site has restrictions and I can only make 4 queries/minute) 
} 

所以這是很好運行。整個腳本花費了大約25分鐘(99%的時間花在每次迭代後等待15秒)。然後,我的網站主機進行了更改,以便腳本在70秒後超時(可以理解)。這完全打破了我的腳本。

我假設我需要使用cronjobs或命令行來完成此操作。我只理解cronjob的基本我們。有關如何在cronjob中分離這項工作的任何高級建議?我不確定cronjob如何通過動態列表進行解析。

回答

0

cron本身不知道你的列表和已經做了什麼,但是你可以使用兩種cron-jobs。

第一個cron-job - 例如每天運行一次 - 可以將100個項目添加到作業隊列中。

第二個cron-job - 例如在一定時間內每分鐘運行一次 - 可以檢查隊列中是否有項目,執行一個(或幾個)項目並將其從隊列中刪除。

請注意,在這種情況下,兩個cron-jobs都只是觸發器來啓動一個php腳本,並且你有兩個不同的腳本,一個設置隊列,一個處理隊列的一部分,所以幾乎所有事情仍然在php中完成。

+0

我理解這個理論,這將很好地自動化。我錯過的部分是2 cron作業如何能夠訪問共享數據。我需要另一個數據庫表來存儲這個隊列還是有一些更簡單的方法? – johnpecan

+0

@johnpecan我個人會使用一個數據庫,但你可以使用一個文件,我猜。這只是兩個不同的PHP腳本連接到相同的隊列/數據庫/文件來完成處理。而不是使用cron來運行它們的瀏覽器。 – jeroen

0

總之,沒有太大的不同。而不是通過modphp或fcgi執行腳本,您將通過命令行php /path/to/script.php執行它。

因爲這是一個不同於http的環境,所以有些東西顯然不起作用。會話,cookies,獲取和發佈變量。輸出獲取發送到stdout而不是瀏覽器。

您可以使用將參數傳遞給腳本。

+0

我認爲這是有道理的,適合我的情況。我今晚會嘗試這個。 – johnpecan

+0

工作很好,謝謝! – johnpecan