Python:覆盖默认的 SIGTERM 处理程序
Python: Override default SIGTERM handler
我正在通过 start-stop-daemon
向我的服务器发送 SIGTERM
信号。正如预期的那样,服务器在收到信号时关闭。现在我想在收到 SIGTERM
后暂停我的服务器 10 秒,然后将其关闭。为此,我写了
def sigterm_handler(signum):
time.sleep(10)
sys.exit(0)
Class server(object):
.
.
def __call__()
signal.signal(signal.SIGTERM, sigterm_handler)
#some code
.
.
现在服务器在收到信号后不再等待 10 秒。一旦发送信号,它就会关闭(在记录器中检查)。
此外,以下消息在我的终端上暂停了 10 秒。
* Stopping Server:
我认为我的代码无法告诉 python 信号正在处理,因此默认处理程序也与我的处理程序一起被调用。知道需要做什么吗?
问题是你的sigterm_handler
。它会尽快阻止您的服务器
它收到 SIGTERM 信号 10 秒,然后将其关闭。
你真正想要的是"ignoring"信号然后10s后退出服务器
(例如使用另一个信号):
shutdown_mode=False
def alarm_handler(signum, frame):
sys.exit(0)
def sigterm_handler(signum):
global shutdown_mode
if not shutdown_mode:
shutdown_mode=True
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(10)
您还想切换到 "shutdown mode",例如服务器不应该
接受新连接等
我正在通过 start-stop-daemon
向我的服务器发送 SIGTERM
信号。正如预期的那样,服务器在收到信号时关闭。现在我想在收到 SIGTERM
后暂停我的服务器 10 秒,然后将其关闭。为此,我写了
def sigterm_handler(signum):
time.sleep(10)
sys.exit(0)
Class server(object):
.
.
def __call__()
signal.signal(signal.SIGTERM, sigterm_handler)
#some code
.
.
现在服务器在收到信号后不再等待 10 秒。一旦发送信号,它就会关闭(在记录器中检查)。
此外,以下消息在我的终端上暂停了 10 秒。
* Stopping Server:
我认为我的代码无法告诉 python 信号正在处理,因此默认处理程序也与我的处理程序一起被调用。知道需要做什么吗?
问题是你的sigterm_handler
。它会尽快阻止您的服务器
它收到 SIGTERM 信号 10 秒,然后将其关闭。
你真正想要的是"ignoring"信号然后10s后退出服务器 (例如使用另一个信号):
shutdown_mode=False
def alarm_handler(signum, frame):
sys.exit(0)
def sigterm_handler(signum):
global shutdown_mode
if not shutdown_mode:
shutdown_mode=True
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(10)
您还想切换到 "shutdown mode",例如服务器不应该 接受新连接等