对意外退出的python守护进程进行故障排除?

对意外退出的python守护进程进行故障排除?,python,strace,Python,Strace,监视python守护进程以确定其意外退出的原因的最佳方法是什么?strace是我最好的选择,还是有一些特定于Python的东西可以完成这项工作?我通常会从添加日志开始。至少,让启动它的任何东西捕获stdout/stderr,以便保存任何堆栈跟踪。检查您的“Exception”块,确保您没有以静默方式捕获异常。您可以使用: python-mpdb myscript.py 如果程序异常退出,这样运行程序将导致它进入后期调试。如果您知道问题出在哪里,也可以使用import pdb;pdb.在要开始调试

监视python守护进程以确定其意外退出的原因的最佳方法是什么?strace是我最好的选择,还是有一些特定于Python的东西可以完成这项工作?

我通常会从添加日志开始。至少,让启动它的任何东西捕获stdout/stderr,以便保存任何堆栈跟踪。检查您的
“Exception”
块,确保您没有以静默方式捕获异常。

您可以使用:

python-mpdb myscript.py


如果程序异常退出,这样运行程序将导致它进入后期调试。如果您知道问题出在哪里,也可以使用
import pdb;pdb.在要开始调试的点设置_trace()
。此外,日志记录也非常有用。

如上所述,请尝试添加日志记录,但是,如果您使用的是python守护程序模块,那么在登录到文件时,它将无法与日志记录模块一起工作,因此您应该手动将日志记录到文件

另外,通过在循环中运行守护进程并捕获循环中的异常,使其在失败后重新启动

例如:

while True:
    try:
        log_to_file("starting daemon")
        run_daemon()
        log_to_file("daemon stopped unexpectedly")
        sleep(1)
    except Exception as err:
        log_to_file(err)

这似乎需要人的互动。它可以正常运行几天,所以这似乎不起作用。是否存在非交互式调试模式?您可以尝试在中运行它,然后当它触发调试器时,您可以附加到调试器,并以交互方式进行调试。非交互式调试模式??我想那应该是日志记录!我的意思是类似于“bash-x”的东西,其中is提供“debug”输出,但不需要有人通过它或任何“键盘交互”。如果你想要详细的调试信息,它只会在你或其他人的程序中可用(通过添加额外的日志记录)。所以没有什么与“bash-x”等价的东西python是否存在?真令人惊讶。