2

[编辑]

我在需要调试的远程服务器中有一个 python 应用程序,当我在本地运行该应用程序时,它会打印一些我需要监视的调试信息(包括 python 回溯)。

感谢jeremy ,我必须使用tail -F监控输出文件并研究他的代码,我在这里找到了他的命令的以下变体:

ssh root@$IP 'nohup python /root/python/run_dev_server.py &>> /var/log/myapp.log &'

这让我几乎完全得到了我想要的东西,登录信息和 python 回溯,但是我没有得到任何我需要的使用python打印显示的信息。

所以我也尝试了他的命令:

ssh root@$IP 'nohup python /root/python/run_dev_server.py 2>&1 >> /var/log/myapp.log &'

它在文件中记录程序的打印输出以及日志信息,但是所有的回溯都丢失了,所以我无法调试 python 异常。

有没有办法可以捕获应用程序产生的所有信息?

提前感谢您的任何建议。

4

1 回答 1

2

我建议做这样的事情:

/usr/bin/nohup COMMAND  ARGS 2>&1 >> /var/log/COMMAND.log &
/bin/echo $! > /var/run/COMMAND.pid

nohup 在您的终端/ssh 会话关闭后保持进程处于活动状态,>> 会将所有 stdout 和 stderr 保存到 /var/log/COMMAND.log 供您稍后使用“tail -f”。

要获得堆栈跟踪输出(您可以将其打印到标准输出,或者做一些花哨的事情,例如通过电子邮件发送它),请将以下几行添加到您的 python 代码中。

    导入系统
    导入回溯
    _old_excepthook = sys.excepthook
    def myexcepthook(exctype, value, tb):
            # if exctype == KeyboardInterrupt: # 处理键盘事件
            # 现在打印到标准输出,但可以在这里发送电子邮件或任何内容。
            打印 traceback.print_tb(tb);
            _old_excepthook(exctype, value, traceback)
    sys.excepthook = myexcepthook

这将捕获所有异常(包括键盘中断,所以要小心)

于 2012-11-02T20:24:35.083 回答