我發現的用於在Python中創建守護進程的每個配方都涉及分叉兩次(對於Unix),然後關閉所有打開的文件描述符。 (例如http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/)。在Python守護進程中維護日誌記錄和/或標準輸出/ stderr
這很簡單,但我似乎有一個問題。在我設置的生產機器上,我的守護進程正在中止 - 因爲所有打開的文件描述符都已關閉。我現在有一個棘手的時間來調試這個問題,並且想知道捕捉和記錄這些錯誤的正確方法是什麼。
什麼是正確的方式來設置日誌,使它在守護進程後繼續工作?在守護進程之後,我是否第二次調用logging.basicConfig()
?什麼是正確的方式來捕獲stdout
和stderr
?我對所有文件爲什麼關閉的細節都很模糊。理想情況下,我的主要代碼可以調用daemon_start(pid_file)
並且日誌記錄將繼續工作。
呼叫日誌記錄配置後daemonizing確實是要走的路。 – Exelian
我在日誌記錄文檔中注意到了這個註釋:「如果根日誌記錄器已經爲它配置了處理程序,則此函數不會執行任何操作。」如果我想在守護進程之前和之後進行日誌記錄,那麼這是如何影響情況的? –
如果我是正確的,可以在初始化記錄器後添加處理程序/過濾器。這意味着您可以在啓動守護程序上下文之前添加FileHandler,並在啓動守護程序之後添加另一個文件句柄。我不完全確定這個工程雖然。 – Exelian