2017-08-31 7 views
1

本質的に、私はsystemdサービスとして動作しているpythonスクリプトを持っています。私がそれを止めるように言うと、そこにはsystemdタイムアウトよりも長い睡眠があり、最後のコードが実行される前にsystemdがそれを殺します。その前のコードはwhileループで、ループは15秒ごとに繰り返されます。 systemdがシグナルを送信したときにスクリプトがループを壊すようにするにはどうすればよいですか?どうすればpythonデーモンがsystemdシグナルを扱うことができますか?

答えて

0

このようなsignal.signalであなたのハンドラを登録します。

#!/usr/bin/env python 
import signal 
import sys 

isKilled = False 

def signal_handler(signal, frame): 
    global isKilled 
    isKilled = True 

signal.signal(signal.SIGINT, signal_handler) 
signal.pause() 

をあなたは、プログラムが強制終了要求を送信してきたかどうかを確認するためにisKilledをテストすることができます。

注:systemdが送信しているコマンドと一致するように、SIGINTの値を変更する必要があります。あなたのユースケースによって異なります。

関連する問題