2012-11-02 3 views
2

[EDITED가]리디렉션 내가 로컬 응용 프로그램을 실행할 때

나는 내가 디버그에 필요한 원격 서버에 파이썬 응용 프로그램을 가지고, 그것은 등 일부 디버그 정보를 (인쇄 ssh를 통해 시작 파이썬 역 추적).

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

이 저를 거의 정확하게 무엇을 가져옵니다 jeremy

덕분에 나는 그의 명령의 다음과 같은 변화를 발견 어디 here을 가지고 자신의 코드를 꼬리 -F를 사용하여 공부 출력 파일을 모니터링 할 수있어 내가 원하는 정보와 파이썬 tracebacks,하지만 난 정보가 표시되지 않습니다 인쇄 내가 원하는 파이썬에서.

은 그래서 나는 그의 명령을 시도 :

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

이 파일에 인쇄 또한 로깅 정보로부터 프로그램의 출력을 기록하지만, 모든 역 추적 그래서 내가 파이썬을 디버깅 할 수 없습니다 손실 예외.

앱에서 생성 한 모든 정보를 캡처 할 수있는 방법이 있습니까?

미리 제안 해 주셔서 감사합니다.

답변

2

나는이 같은 일을 제안 : /var/log/COMMAND.log 모든 표준 출력과 표준 에러를 저장합니다 >>

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

nohup을이 터미널/SSH 세션이 닫힌 후 살아 과정을 유지를 나중에 "꼬리 - f"에.

stacktrace 출력을 얻으려면 (stdout으로 인쇄하거나 전자 메일처럼 멋진 작업을 수행 할 수 있음) 파이썬 코드에 다음 행을 추가하십시오. nohup을가 완료 될 때까지 로그에 프로그램의 출력을 추가 할 것입니다 경우

 

    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

이 좋은 소리 모든 예외 잡기 (키보드 인터럽트를 포함하여, 그래서 조심해야)합니다 당신은 알고 계십니까? 또는 프로그램이 인쇄 할 때 수행합니까? – jeruki

+1

nohup은 기본적으로 nohup.out 파일이 이미 리디렉션되지 않은 경우 표준 출력을 출력합니다. (위의 명령은 모든 stdout 및 stderr를 /var/log/command.log에 추가합니다). 또한 문제를 해결할 수있는 '화면'(http://www.gnu.org/software/screen/) 명령을 살펴볼 것을 제안합니다. – jeremy

+0

안녕하세요 jeremy 나는 명령을 시도하고 한 가지를 제외하고 잘 작동, 프로그램에서 모든 출력이 파일로 리디렉션되지 않습니다, 파이썬에서 추적 표시 내 로컬 콘솔에 여전히 나타납니다 그리고 그것을 사용하게하지 않습니다. 그 것처럼되거나 명령에 추가해야하는 다른 것이 있습니까? – jeruki

관련 문제