2012-11-02 29 views
2

將帖子重定向到遠程Python應用程序的文件輸出通過ssh開始

我有,我需要調試遠程服務器的Python應用程序,當我在本地運行的應用程序將打印一些調試信息(包括python tracebacks),我需要監控。

由於jeremy我得到了使用尾巴-F和學習他的代碼,我得到了here,我發現他的指揮下改變監視輸出文件:

ssh [email protected]$IP 'nohup python /root/python/run_dev_server.py &>> /var/log/myapp.log &' 

這讓我幾乎什麼我想要的,登錄信息和python回溯,但我沒有得到任何信息顯示使用打印從python我需要。

所以我也試過他的命令:

ssh [email protected]$IP 'nohup python /root/python/run_dev_server.py 2>&1 >> /var/log/myapp.log &' 

它在文件中記錄的程序從打印並記錄信息的輸出,但所有的回溯丟失,所以我不能調試蟒蛇例外。

有沒有一種方法可以捕捉應用程序產生的所有信息?

在此先感謝您的任何建議。

回答

2

我建議做這樣的事情:

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

nohup的保持過程活着終端/ SSH會話關閉,之後將>>保存所有輸出和錯誤,以/var/log/COMMAND.log稍後你會「尾巴-f」。

要獲得堆棧跟蹤輸出(您可以打印到標準輸出,或做一些像電子郵件它幻想)添加以下行到您的Python代碼。

 

    import sys 
    import traceback 
    _old_excepthook = sys.excepthook 
    def myexcepthook(exctype, value, tb): 
      # if exctype == KeyboardInterrupt: # handle keyboard events 
      # Print to stdout for now, but could email or anything here. 
      print traceback.print_tb(tb); 
      _old_excepthook(exctype, value, traceback) 
    sys.excepthook = myexcepthook 

這將捕獲所有異常(包括鍵盤中斷,所以一定要小心)

+0

聽起來不錯,你知道,如果nohup的是要在程序的輸出添加到日誌,直到它完成?或者它是否在程序打印時執行此操作? – jeruki

+1

nohup默認情況下會將標準輸出放入名爲nohup.out的文件中,如果該文件尚未重定向。 (上面的命令將所有stdout和stderr追加到/var/log/command.log)。我也會建議看看命令「屏幕」(http://www.gnu.org/software/screen/),它也可以解決你的問題。 – jeremy

+0

嘿傑里米我試過命令,它工作正常,除了一件事,並不是所有的輸出從程序重定向到該文件,從python的任何回溯仍然出現在我的本地控制檯,並不讓我使用它,是否應該是這樣或還有什麼我必須添加到命令? – jeruki

相關問題