2012-01-17 54 views
0

好的,所以我使用mysql數據庫應用程序,該數據庫在orders表中有一個名爲end_date的字段。該字段由管理員管理。我需要一個在end_date字段前2周運行的cronjob。任何想法如何做到這一點。我也使用每當寶石如何根據db中的日期時間更新cron

every 1.day, :at => '12:30 am' do 
    runner "Order.task_that_checks_date" 
end 

我首先想到的是日常運行一個cron作業,檢查值,但我最討厭跑步一個cron每天如果我只需要有cron運行一年一次。關於如何改進這個問題的任何想法

回答

1

我能想到的那個問題的最平滑的解決方案是在應用程序中的某處放置一個「next_cron」日期,並在after_save鉤子上更新該日期。邏輯就是在應用程序中找到最快的end_date,並將「next_cron」日期設置爲前兩週。 cron要麼在這個日期之前一直運行,要麼每隔一段時間檢查一次,看看今天是否是next_cron日,要麼做它的事情,要麼退出。

之前已經說過,我認爲讓你的cron每天運行更有效率,並且檢查是否有任何需要採取的措施。這取決於您期望將多少任務投入系統,但作爲一般規則,我寧願有一個後臺進程在凌晨三點需要三十秒,而不是面對用戶的操作在峯值期間多花費0.05秒交通時間。