1
因此,本質上,我有一個python腳本作爲systemd服務運行。當我告訴它停止時,那裏的睡眠時間比系統時間更長,並且systemd在最後一段代碼運行之前將其殺死。之前的代碼是一個while循環,並且循環每15秒重複一次。我怎樣才能讓腳本在systemd發送信號時打破循環?如何使python守護進程處理systemd信號?
因此,本質上,我有一個python腳本作爲systemd服務運行。當我告訴它停止時,那裏的睡眠時間比系統時間更長,並且systemd在最後一段代碼運行之前將其殺死。之前的代碼是一個while循環,並且循環每15秒重複一次。我怎樣才能讓腳本在systemd發送信號時打破循環?如何使python守護進程處理systemd信號?
註冊與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
,看看該程序已經發出了終止請求。
注意:您可能必須更改SIGINT
的值以匹配systemd正在發送的命令。這將取決於你的用例。