我发现的用于在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