2014-01-18 6 views
8

python-daemon을 설치했는데 이제 신호 처리를 시도하고 있습니다. 내 코드 : pythonDaemon가를 실행하는 텍스트가 /var/log/syslog 5 초마다 기록됩니다 :python-daemon에서 신호 처리

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import signal, time, syslog 
import daemon 

def runDaemon(): 
    context = daemon.DaemonContext() 

    context.signal_map = { signal.SIGTERM: programCleanup } 

    context.open() 
    with context: 
     doMainProgram() 

def doMainProgram(): 
    while True: 
     syslog.syslog("pythonDaemon is running") 
     time.sleep(5) 

def programCleanup(): 
    syslog.syslog("pythonDaemon STOP") 

if __name__ == "__main__": 
    runDaemon() 

나는 예상대로 코드의 모든 작품을 시작합니다. 그러나 kill -TERM *PID*으로 데몬을 종료하려면 데몬이 종료되지만 pythonDaemon STOP 텍스트가 syslog에 없습니다.

내가 뭘 잘못하고 있니?

NB : 여기서는 from daemon import runner으로 작업하지 않으므로 (이전 버전의 lockfile이 필요함) 오류가 발생하고 신호 처리 권한을 얻는 유일한 가능성이 아니라면이 문제를 해결할 수 없습니다. .

답변

8

시그니처가 잘못되었으므로 신호 처리기가 호출되지 않는 것을 제외하면 코드가 정상적으로 보입니다. 이런 식으로합니다

def programCleanup(signum, frame): 

를 문서 (signal.signal())를 인용 :

핸들러는 두 개의 인자로 호출

상기 신호의 수 및 현재의 스택 프레임