2010-12-17 62 views
2

我正在使用delayed_job在我的Rails應用程序上運行一些後臺進程。這些進程讀取和寫入數據庫以及寫入日誌文件。停止守護進程是否會破壞我的數據?

我的問題是 - 當我停止工作時,是否會終止進程(最終會破壞我的數據)還是等待作業結束或類似的事情?

回答

2

這一切都取決於你如何編寫代碼。

通常殺死一個作業會跳出代碼上的插件,並立即停止。這可能在寫入過程中或緩衝區被刷新或文件正常關閉之前。

如果您有要完成的任務,您可以捕獲信號。然後,您的代碼可以選擇忽略信號並繼續運行,這不是最佳解決方案,也可能會開始正常關閉,刷新緩衝區,關閉數據庫連接,關閉文件等,然後退出。

而且,忽略信號的原因並不好,有些操作系統發送告訴應用程序在系統關閉或重新啓動之前關閉。沒有關閉的應用程序可能會讓用戶或系統管理員感到憤怒,然後誰會找到一種方式讓它退出,很可能是以一種不正當的方式。

檢查出Signal瞭解更多信息。

+1

通過設計你的工作的方式,使一切或全無,閱讀「事務性」,可以解決這個問題,以優雅的方式。 – hurikhan77 2010-12-17 21:25:19

+0

@hurican:當殺死的守護進程不支持事務處理時,使客戶端軟'trasactional'沒有用處。因此問題是他的數據庫是否支持交易。 – 2011-01-08 21:32:31