【发布时间】:2018-02-01 09:08:37
【问题描述】:
如何检查 Ruby 中的当前脚本是否正在关闭?
特别是,如果程序正在关闭,我想将@reconnect 设置为false,不再允许 web-socket 重新连接。我试过Signal.trap("TERM"),但它似乎不起作用。
@reconnect 是 WebsocketClient 类中的一个实例变量,我无法在类外的脚本中直接更改它。
class WebsocketClient
def ws_closed(event)
$logger.warn "WS CLOSED"
Signal.trap("TERM") {
@stop = true
@reconnect = false
}
unless $reauth
if @stop
EM.stop
elsif @reconnect
$logger.warn "Reconnecting..."
EM.add_timer(@reconnect_after){ connect! }
end
end
end
end
at_exit {
$logger.fatal "Application terminated. Shutting down gracefully..."
# ...
# Do some exit work...
# ...
exit!
}
CTRL-C 输出
01-02-2018 12:00:54.59 WARN > WS CLOSED
01-02-2018 12:00:54.595 WARN > Reconnecting...
01-02-2018 12:00:54.596 FATAL > Application terminated. Shutting down gracefully..
【问题讨论】: