2011-06-13 6 views
4

나는 파이썬에서 python-daemon 라이브러리를 사용하는 데몬을 구현했다.파이썬 데몬 프로세스가 죽어가는 이유를 찾는 방법은 무엇입니까?

그러나 데몬은 주기적으로 하루 동안 여러 달 동안 죽는 것처럼 보입니다 (또는 죽습니다).

나는 예외를 잡아 내고, 파일에 기록하고, 나에게 우편으로 보내기 때문에 죽어가는 데몬의 이유를 찾으려고 노력했다. 나는 나에 기록하고 우편으로 꽤 몇 가지 예외를 했어

import daemon 

context = daemon.DaemonContext(
    working_directory='/foo/', 
    pidfile=lockfile.FileLock('/foo/foo.pid') 
) 

try: 
    with context: 
     do_stuff() 
except Exception, e: 
    log_exception_to_file(e) 
    mail_exeption_to_me(e) 

, 그래서 코드는 일반적으로 작동 알고 내 스크립트의 데몬 부분은 대략 같다.

대다수의 경우, 아무 것도없고 감시 스크립트가 데몬이 더 이상 실행되지 않는다는 사실을 알려줍니다. 데몬이 죽거나 죽는 이유를 알아 내거나 추적 할 수있는 방법이 있습니까?

+0

데몬이 paramiko를 사용합니까? 이전에 그런 문제가 있었기 때문에 해결 방법이 있습니다. –

+2

일부 맞춤형 신호 처리기를 설정하고 신호를 파일로 기록 할 수 있습니다. 그것은 완전한 해결책이 아니지만 거기에 무슨 일이 일어나고 있는지 알려줄 수 있습니다. 다른 한편으로는 디버거 나 strace가 부착 된 상태에서 실행할 수 있습니다. – tmg

+0

paramiko를 사용하지 않는 것이 두렵습니다. 디버거/strace를 통해 실행하는 방법에 대해 생각해 보았습니다. 문제는 죽기 전에 몇 달 동안 계속 실행되는 경우가 있기 때문에 죽기 직전에 어떤 일이 발생했는지 알 수있는 상당히 가벼운 방법이 필요합니다. –

답변

2

우편물을 보내는 동안 메모리 사용량을 확인하십시오. 어쩌면 메모리 누수가 있고 사용 가능한 모든 RAM을 소모 할 때 죽을 수도 있습니다. resource 모듈은 앱이 maxrss, ixrss, idrss 및 isrss를 찾도록하고, 5 분마다 한 번씩 기록하면 메모리 누수가 발생했는지 여부를 분명히 알 수 있습니다.

관련 문제