2011-06-08 90 views
7

這是更多的實現問題,但是使用像cron這樣簡單的任務來安排諸如mapreduce for MongoDB之類的任務有什麼缺點嗎?說每小時需要執行一次,這似乎是一個合適的方式來做到這一點......但我想我只是問,因爲像Resque和其他所有流行的工作排隊系統。爲MongoDB調度MapReduce作業

我想我的問題更像,cron是否提供了堅實可靠的解決方案?思考?

回答

8

克朗已經使用了幾十年,是相當可靠和堅實;如果你的cron不可靠,那麼我建議與你的操作系統供應商進行嚴格的討論。另外,MongoDB文檔討論了cron作業(例如谷歌「site:mongodb.org cron」),所以大概cron作業是MongoDB的預期。這就是說,如果你已經爲另一個調度系統設置了一堆基礎設施,那麼可能沒有理由使用cron來執行MongoDB,而其他任務則可能使用其他方法。

在任何情況下,你可能會想層上的簡單的PID文件鎖定系統,如果你的cron作業可能需要足夠長的時間重疊,而您只需要一個同時運行:

  • 這個cron作業在啓動時查找PID文件。
  • 如果找到該文件,則它會從文件中讀取舊作業的PID並檢查它是否仍在運行。
    • 如果舊的運行,那麼新的會抱怨並退出。
    • 如果舊的沒有運行,那麼新的將繼續運行。
  • 當新作業決定可以啓動時,它會將其PID寫入PID文件。
  • 新作業完成後,它會在退出前立即刪除PID文件(或使用atexit處理程序或您的環境支持的任何類似功能)。