2014-01-18 24 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())引用:シグナル番号と現在のスタックフレーム

:ハンドラが2つの引数で呼び出され

関連する問題