排查意外退出的Python守护进程?

4 投票
3 回答
2236 浏览
提问于 2025-04-16 17:28

监控一个Python后台程序,看看它为什么会突然停止,最好的方法是什么?使用strace工具是否是最好的选择,还是有其他专门针对Python的工具可以做到这一点?

3 个回答

0

就像上面提到的那样,试着添加日志功能。不过要注意,如果你使用的是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)
0

你可以使用 pdb

python -m pdb myscript.py

这样运行你的程序,如果程序异常退出,就会进入一种叫做“事后调试”的模式。如果你大概知道问题出在哪里,你也可以在想要开始调试的地方加上 import pdb; pdb.set_trace()。另外,多记录一些日志也会很有帮助。

1

我通常会先给它加上日志记录。至少要让启动它的部分能够捕捉到标准输出和错误输出,这样任何错误信息都能被保存下来。检查一下你的 except 代码块,确保你没有悄悄地捕捉到错误而不去处理它们。

撰写回答