【发布时间】:2017-08-31 19:06:08
【问题描述】:
所以本质上,我有一个 python 脚本作为 systemd 服务运行。当我告诉它停止时,那里的睡眠时间比 systemd 超时时间长,并且 systemd 在最后一点代码运行之前将其杀死。之前的代码是一个while循环,循环每15秒重复一次。我怎样才能让脚本在 systemd 发送信号时中断循环?
【问题讨论】:
所以本质上,我有一个 python 脚本作为 systemd 服务运行。当我告诉它停止时,那里的睡眠时间比 systemd 超时时间长,并且 systemd 在最后一点代码运行之前将其杀死。之前的代码是一个while循环,循环每15秒重复一次。我怎样才能让脚本在 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 发送的命令。这将取决于您的用例。
【讨论】: