2012-03-26 59 views
13

我有興趣運行一個很長時間的耙子任務,需要幾小時才能完成,我有興趣瞭解處理這個問題的最佳實踐。處理很長時間的耙子任務

可能的解決方案,我發現:

  1. 設置cron作業
  2. delayed_job的
  3. resque

的cron似乎是一個簡單的解決方案來建立,但它是理想的一個很長的任務?你使用什麼,你的解決方案有哪些優點/缺點?

回答

30

我個人喜歡Resque,你可以使用resque-scheduler gem來處理長時間運行或週期性任務。

如果你不需要經常運行你的任務,你可以將rake任務妖魔化,以確保它在SSH會話死亡或者其他情況下繼續運行。

嘗試是這樣的:

nohup rake my:task & 

nohup將輸出發送到nohup.out在您運行任務的目錄,也將讓留下您的SSH會話,而過程中死亡,其次是&將運行它作爲一個deamon。

+0

這看起來好像完全符合我的需求。在接受其他人的意見之前,我會先保留這個問題一段時間。謝謝! – 2012-03-26 18:42:24

+0

沒有問題!我希望你找到你正在尋找的解決方案!一旦找到它就發佈你的解決方案! – 2012-03-26 20:24:45

1

在我創建的一個應用程序中,用戶可以上傳上傳時縮略圖創建預覽圖像的PDF文件。由於PDF可能非常大,縮略圖可能需要一段時間,並且必須在後臺運行。要做到這一點,我用

  • Paperclip用於上傳,
  • delayed_paperclip寶石縮略移交給後臺進程,
  • Resque,通過Redis後盾,以處理工作隊列,並
  • God寶石,發射Redis和Resque工作人員並監控整個shebang。

從積極的一面,你會得到漂亮Resque GUI在行動查看你的員工,你已經有了上帝那裏觀看(並殺死,並重新啓動)失控的進程(這往往發生相當當你在ImageMagick中處理PDF時),使整個事情更加穩定和可靠。

從負面來看,這比建立cron工作困難得多。但是讓cron運行一個長時間的,不受監控的內存密集型進程似乎對我來說是一場災難。

希望有幫助!