我有一个python irc bot,我通过/etc/init.d/phenny start
以root身份启动。有时它会死掉,但似乎一夜之间就会发生。
我可以做些什么来检查它并在文本文件中查看进程的状态?
答案 0 :(得分:1)
如果您对真正低级别的流程活动感兴趣,可以在strace下运行python解释器,并将标准错误重定向到文件。
如果您只对机器人崩溃时检查python代码感兴趣,并且您在源中发生崩溃的位置,则可以使用try
/ except
包裹该位置。 except
子句中的break into the debugger:
import pdb; pdb.set_trace()
但是,您可能需要以非守护进程模式运行机器人才能使用它。
答案 1 :(得分:1)
如果你知道它仍然在运行,你可以将它堆叠起来看它的回溯。我不确定它会有多大用处,因为你会看到解释器的调用堆栈。您也可以像其他人提到的那样尝试strace或ltrace。
我还要确保在脚本运行的任何环境中,你都设置了ulimit -c unlimited,以便在python完全崩溃的情况下生成核心。
我可能尝试的另一件事是让这个工作由不等待它的孩子的父母执行。即使底层作业已退出,这也应该导致proc表项作为僵尸保留。
答案 2 :(得分:0)
你可能想尝试Python psutils,这是我使用和工作的东西。
答案 3 :(得分:0)
获得关于这个问题的一些额外线索的便宜方法是用
开始/etc/init.d/phenny start 2>/tmp/phenny.out 1>&2
当它崩溃时,检查/tmp/phenny.out的尾部以获取Python回溯。
答案 4 :(得分:0)
如果您只需要验证进程是否正在运行,您可以运行一个检查命令输出的脚本
ps ax | grep [p] henny
每隔几秒钟。如果它是空的,那么显然这个过程已经死了。