2017-04-30 18 views
1

サービスとして実行されているPythonスクリプトがあります。ディスクに書き込みます。ユーザーがサービスのsystemctl stopを呼び出すと、私は自分のやり方でこのコマンドを処理して、ファイルの破損のリスクを減らしたいと考えています。Pythonがsystemctlをどのように処理できますか?

どのように私はsystemctlの停止コマンドをキャッチできますか?

は/ usr/libに/ systemdに/システムでの私のファイルは次のとおりです。

[Unit] 
Description=foo 

[Service] 
Type=simple 
ExecStart=/usr/bin/python /srv/go.py 
User=jon 
Restart=always 

[Install] 
WantedBy=graphical.target 

私のPythonスクリプトは次のとおりです。

#!/usr/bin/python 

import time 
import datetime 
import threading 

def worker(): 
    while True: 

     with open('/tmp/go.txt', 'a') as f: 
      s = str(datetime.datetime.utcnow()) + '\n' 
      f.write(s) 
      print(s) 

      time.sleep(1) 


if __name__=='__main__': 
    t = threading.Thread(target=worker) 
    t.start() 
+0

おそらく、これはあなたの質問に役立つでしょうか? https://stackoverflow.com/questions/18499497/how-to-process-sigterm-signal-gracefully – csim

+0

またはhttps://stackoverflow.com/questions/1112343/how-do-i-capture-sigint-in -python – languitar

答えて

4

systemd documentationで説明したように、プロセスは、すぐに、そしてSIGTERMを受信しますSIGHUP。しばらくすると、SIGKILLが送信されます。

すべての信号およびそれらを送信する戦略は、関連するサービスファイルで変更することができます。

another stackoverflow questionを参照して、これらの信号をPythonプログラムでどのように処理するかを確認してください。

関連する問題