2016年12月30日 星期五

關於 cron jobs 執行頻率的調整問題

這兩周來已把 PHP 專案中的 cron jobs 程式大致寫完, 目前執行頻率大都是 5 分鐘, 但是手動執行時偶而會收到伺服器會回應 "Resource limit reached", 詢問線上客服, 他們回覆說是因為我的 Premium 方案可使用的 CPU 資源已超過之故, 這可能是我設定每五分鐘執行一次, 每一個 cron job 大約都在 0, 5, 10, ... 分同時執行的關係. 雖然等個幾秒鐘重試即恢復正常, 但顯然執行頻率似乎需要調整.

其實 Cron jobs 大致可分成兩類, 一種是所擷取的目標網頁是個別公司的資料, 因此需要靠指標來分批擷取, 也是這次要將擷取頻率從每 5 分鐘一次改成每 15 分鐘一次的對象; 第二種是擷取的網頁已包括全部訊息, 不必依賴指標移動來分批擷取者 (例如美元指數資料), 這種 cron job 只要半小時或一小時擷取一次即可, 我是將其分散在 0~59 分啟動執行, 例如下圖是指定在每小時的 5 分去執行一次 cron job :


而需分批執行的 cron jobs 則要依據資料多久必須全部更新一次來考量執行頻率. 若以目前擷取 976 個公司資料來計, 若要在一天內更新全部資料的話, 每小時要更新約 967/24=40 個, 每次抓 10 個的話, 每小時要抓 40/10=4 次, 亦即大概 60/4=15 分鐘抓一次即可. 在 Hostinger cPanel 的 advanced cron jobs 中有每 15 分鐘執行一次的選項 :


底下時, 日, 月, 周都用 Every ~ 即可, 如下所示 :


當然有些不需要每天更新一輪的 cron 可以設為每 30 分鐘執行一次 (通常一次 10 個), 這樣就是每兩天全部刷新一遍了, 同理可推, 每小時執行一次的話要 4 天才會抓齊全部資料; 每兩小時一次的話則要 8 天.

今天因為還剩休假一天必須休掉, 下午重新整理 cron jobs 設定, 大部分都改成 15 分鐘 run 一次, 少部分需要在 8 小時內分批抓齊資料者 (如 yahoo 的 credit, major, dealing) 仍維持每 5 分鐘跑一次. 在此將做法做個紀錄以便後續參考.

沒有留言 :