我通过SIGTERM
向我的服务器发送start-stop-daemon
信号。正如预期的那样,服务器在收到信号时会关闭。现在我想在收到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正在处理信号,因此,默认处理程序也会与我的处理程序一起被调用。知道需要做什么吗?
答案 0 :(得分:1)
问题在于你sigterm_handler
。它会尽快阻止您的服务器
它收到了10秒的SIGTERM,然后将其关闭。
你真正想要的是“忽略”信号,然后在10秒后退出服务器 (例如,使用另一个信号):
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)
您还需要切换到“关机模式”,例如服务器不应该 接受新的联系等。