【发布时间】:2011-05-11 19:08:28
【问题描述】:
监视 python 守护程序以确定它意外退出的原因的最佳方法是什么? strace 是我最好的选择,还是有一些特定于 Python 的东西可以完成这项工作?
【问题讨论】:
监视 python 守护程序以确定它意外退出的原因的最佳方法是什么? strace 是我最好的选择,还是有一些特定于 Python 的东西可以完成这项工作?
【问题讨论】:
我通常会从添加日志记录开始。至少,让启动它的任何内容捕获 stdout/stderr 以便保存任何堆栈跟踪。检查您的 except 块以确保您没有静默捕获异常。
【讨论】:
你可以使用pdb:
python -m pdb myscript.py
这样运行你的程序,如果异常退出,会导致它进入事后调试。如果您知道问题出在哪里,您也可以在要开始调试时使用import pdb; pdb.set_trace()。日志记录也有很大帮助。
【讨论】:
screen 中运行它,然后当它触发调试器时,您可以附加到它,并以交互方式调试它。非交互式调试模式??我想那会记录下来!
如上面的回答,尝试添加 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)
【讨论】: