【问题标题】:Troubleshoot python daemon that quits unexpectedly?对意外退出的 python 守护进程进行故障排除?
【发布时间】:2011-05-11 19:08:28
【问题描述】:

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

【问题讨论】:

    标签: python strace


    【解决方案1】:

    我通常会从添加日志记录开始。至少,让启动它的任何内容捕获 stdout/stderr 以便保存任何堆栈跟踪。检查您的 except 块以确保您没有静默捕获异常。

    【讨论】:

      【解决方案2】:

      你可以使用pdb:

      python -m pdb myscript.py

      这样运行你的程序,如果异常退出,会导致它进入事后调试。如果您知道问题出在哪里,您也可以在要开始调试时使用import pdb; pdb.set_trace()。日志记录也有很大帮助。

      【讨论】:

      • 这似乎需要人工交互。它可以正常运行几天,因此这似乎不起作用。有非交互式调试模式吗?
      • 您可以尝试在screen 中运行它,然后当它触发调试器时,您可以附加到它,并以交互方式调试它。非交互式调试模式??我想那会记录下来!
      • 我的意思类似于“bash -x”,它提供“调试”输出,但不需要有人单步执行或任何“键盘交互”。
      • 如果您想要详细的调试信息,只有在您或其他人的程序具有您正在使用的功能(通过添加额外的日志记录)时才可用。
      • 那么对于 python 来说,不存在相当于“bash -x”的东西吗?这太令人惊讶了。
      【解决方案3】:

      如上面的回答,尝试添加 Logging,但是如果你使用 python-daemon 模块,它在记录到文件时将无法与 Logging 模块一起使用,所以你应该手动将日志记录到文件中。

      此外,通过在循环内运行守护程序并在循环内捕获异常,使您的守护程序在失败后重新启动。

      例子:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        • 2011-02-07
        • 2013-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多